Указание gcc напрямую связать библиотеку статически
Мне кажется странным использовать -Wl,-Bstatic
чтобы сказать gcc
с какими библиотеками я хочу связать статически. В конце концов я говорю gcc
непосредственно вся другая информация о связывании с библиотеками (-Ldir
, -llibname
).
Можно ли напрямую указать драйверу gcc, какие библиотеки должны быть связаны статически?
Пояснение: я знаю, что если определенная библиотека существует только в статических версиях, она будет использовать ее без -Wl,-Bstatic
, но я хочу подразумевать gcc
предпочесть статическую библиотеку. Я также знаю, что указание файла библиотеки напрямую связано с ним, но я предпочитаю сохранить семантику для включения статических и динамических библиотек одинаковыми.
2 ответа
Можно конечно, использовать -l:
вместо -l
, Например -l:libXYZ.a
связать с libXYZ.a
, Обратите внимание на lib
выписан, в отличие от -lXYZ
который будет автоматически расширяться до libXYZ
,
Вы можете добавить файл.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).