Указание 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).