[sisyphus] связывание в ar

Denis S. Filimonov =?iso-8859-1?q?den_=CE=C1_academ=2Eorg?=
Чт Окт 31 20:04:37 MSK 2002


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




Подробная информация о списке рассылки Sisyphus