From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Content-Type: text/plain; charset="koi8-r" From: "Denis S. Filimonov" To: sisyphus@altlinux.ru Subject: Re: [sisyphus] =?koi8-r?b?09fR2tnXwc7JxSDX?= ar Date: Thu, 31 Oct 2002 23:04:37 +0600 User-Agent: KMail/1.4.3 References: <20021031183458.GS2322@bebi.novosoft.ru> In-Reply-To: <20021031183458.GS2322@bebi.novosoft.ru> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-Id: <200210312304.37932.den@academ.org> Sender: sisyphus-admin@altlinux.ru Errors-To: sisyphus-admin@altlinux.ru X-BeenThere: sisyphus@altlinux.ru X-Mailman-Version: 2.0.9 Precedence: bulk Reply-To: sisyphus@altlinux.ru List-Unsubscribe: , List-Id: List-Post: List-Help: List-Subscribe: , List-Archive: Archived-At: List-Archive: 1 Ноябрь 2002 00:34, Alexey Morozov написал: > c++ -o test29 test29.o libtest29a.a libtest29b.a > > то нас ждет... э-э-э, разочарование: > alex@pyro alex/tmp/c++ $ c++ -o test29 test29.o libtest29a.a libtest29b.a > libtest29b.a(test29b.o): In function `singleton::get()': > test29b.o(.gnu.linkonce.t._ZN9singleton3getEv+0x2d): undefined reference to > `singleton::s' collect2: ld returned 1 exit status > alex@pyro alex/tmp/c++ $ _ > > Небольшое расследование показало, что причиной неверной сборки является > /неправильный/ порядок указания библиотек. То есть, если libtest29b.a > поставить перед libtest29a.a, то все слинкуется нормально. > > По-моему, это бага (хотя бы из соображений использования cross-linked > библиотек внутри некоторого проекта). > > и ar, и ld из комплекта binutils-2.13.90.0.4-alt1 > > Что скажут ведущие си- и плюсоводы? да вроде как ld всегда так поступал. линкуя очередную библиотеку, он проверяет совпадения между библиотечной таблицей экспорта и уже созданной таблицей неотрезолвленых символов, но не проверяет наличие импортируемых этой библиотекой символов в общей таблице экспортируемых символов (от всех предыдущих библиотек). таким образом, если A зависит от B, gcc ... A.a B.a слинкуется, а gcc ... B.a A.a -- нет. при перекрестной зависимости библиотеки линкуются два раза: gcc ... A.a B.a A.a то же самое с .so > > _______________________________________________ > Sisyphus mailing list > Sisyphus@altlinux.ru > http://altlinux.ru/mailman/listinfo/sisyphus -- If computers take over (which seems to be their natural tendency), it will serve us right. -- Alistair Cooke