Передача gcc непосредственно для связывания библиотеки статически

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

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

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

    Конечно, можно использовать -l: вместо -l . Например -l:libXYZ.a для связи с libXYZ.a . Обратите внимание на -lXYZ 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 . Вот страница 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).

    Давайте будем гением компьютера.