Подтвердить что ты не робот

Как заставить компоновщика использовать общую библиотеку вместо статической библиотеки?

Это цитата из книги программирования 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?

4b9b3361

Ответ 1

Вы можете использовать опцию -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

Ответ 2

от человека:

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

удача