Как заставить компоновщик использовать разделяемую библиотеку вместо статической библиотеки? - PullRequest
16 голосов
/ 12 декабря 2010

Это цитата из книги по программированию в Linux:


% gcc -o app app.o -L. –ltest

Предположим, что доступны и libtest.a, и libtest.so. Тогда компоновщик должен выберите одну из библиотек, а не другую. Компоновщик ищет каждый каталог (сначала указанные с параметрами -L, а затем в стандартных каталогах). компоновщик находит каталог, содержащий либо libtest.a, либо libtest.so, компоновщик останавливается поиск в каталогах. Если в каталоге присутствует только один из двух вариантов, компоновщик выбирает этот вариант. В противном случае компоновщик выбирает версию общей библиотеки, если только Вы явно указываете это иначе. Вы можете использовать опцию -static для запроса статического архивы. Например, в следующей строке будет использоваться архив libtest.a, даже если libtest.so также доступна общая библиотека:

% gcc -static -o app app.o -L. –ltest


Поскольку, если компоновщик обнаруживает каталог, содержащий libtest.a, он прекращает поиск и использует эту статическую библиотеку, как заставить компоновщик искать только общую библиотеку, а не статическую?

% gcc -o app app.o -L. libtest.so?

Ответы [ 2 ]

19 голосов
/ 12 декабря 2010

Вы можете использовать параметр -l в его форме -l:filename, если ваш компоновщик поддерживает его (более старые версии ld не поддерживали)

gcc -o app app.o -L. -l:libtest.so

Другой вариант - использовать имя файла напрямую, без -l и -L

gcc -o app app.o /path/to/library/libtest.so
0 голосов
/ 12 декабря 2010

от man:

-shared-libgcc
-static-libgcc
В системах, которые предоставляют libgcc в качестве разделяемой библиотеки, эти параметры заставляют использовать либо общую, либостатическая версия соответственно.Если при настройке компилятора не было создано ни одной общей версии libgcc, эти параметры не действуют.

удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...