Указание gcc напрямую связать библиотеку статически
мне кажется странным использовать -Wl,-Bstatic
чтобы сказать gcc
какие библиотеки я хочу связать со статически. После всего, что я говорю gcc
непосредственно вся другая информация о связывании с библиотеками (-Ldir
,-llibname
).
можно ли напрямую указать драйверу gcc, какие библиотеки должны быть связаны статически?
пояснение: Я знаю, что если определенная библиотека существует только в статических версиях, она будет использовать ее без -Wl,-Bstatic
, но Я хочу сказать gcc
чтобы предпочесть статическую библиотеку. Я также знаю, что указание файла библиотеки напрямую связано с ним, но я предпочитаю сохранять семантику для включения статических и динамических библиотек одинаково.
2 ответа:
можно конечно, использовать
-l:
вместо-l
. Например-l:libXYZ.a
в связи сlibXYZ.a
. Обратите внимание наlib
написано, а не-lXYZ
который будет автоматически расширяться, чтобыlibXYZ
.
вы можете добавить .файл в команду:
gcc yourfiles /path/to/library/libLIBRARY.a
но это не говорит с драйвером gcc, а с
ld
компоновщик как параметры, такие как-Wl,anything
есть.когда вы говорите gcc или ld "- Ldir-lLIBRARY", компоновщик будет проверять как статические, так и динамические версии библиотеки (вы можете увидеть процесс с
-Wl,--verbose
). Для изменения порядка проверяемых типов библиотек можно использовать-Wl,-Bstatic
и-Wl,-Bdynamic
. Вот man-страница 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).