Указание gcc напрямую связать библиотеку статически - PullRequest
105 голосов
/ 05 июля 2011

Мне странно использовать -Wl,-Bstatic, чтобы сообщить gcc, с какими библиотеками я хочу статически связываться.В конце концов, я говорю gcc напрямую всю остальную информацию о связывании с библиотеками (-Ldir, -llibname).

Можно ли напрямую указать драйверу gcc, какие библиотеки должны быть связаны статически?

Пояснение: Я знаю, что если определенная библиотека существует только в статических версиях, она будет использовать ее без -Wl,-Bstatic, но я хочу подразумевать gcc для предпочтения статической библиотеки.Я также знаю, что указание файла библиотеки напрямую связано с ним, но я предпочитаю сохранять семантику для включения статических и динамических библиотек одинаковой.

Ответы [ 2 ]

151 голосов
/ 22 декабря 2013

Можно, конечно, использовать -l: вместо -l. Например -l:libXYZ.a для связи с libXYZ.a. Обратите внимание на записанное lib, в отличие от -lXYZ, которое автоматически расширится до libXYZ.

115 голосов
/ 05 июля 2011

Вы можете добавить .a файл в команду связывания:

  gcc yourfiles /path/to/library/libLIBRARY.a

Но речь идет не о драйвере gcc, а о компоновщике ld, так как такие параметры, как -Wl,anything.

Когда вы сообщаете gcc или ld "-Ldir -lLIBRARY", компоновщик проверяет как статическую, так и динамическую версии библиотеки (вы можете увидеть процесс с -Wl,--verbose).Для изменения порядка проверенных типов библиотек вы можете использовать -Wl,-Bstatic и -Wl,-Bdynamic.Вот справочная страница GNU LD: http://linux.die.net/man/1/ld

Чтобы динамически связать вашу программу с lib1, lib3 и статически lib2, используйте такой вызов gcc:

gcc program.o -llib1 -Wl,-Bstatic -llib2 -Wl,-Bdynamic -llib3

при условии, что по умолчанию установлено значениеld должен использовать динамические библиотеки (это в Linux).

...