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

Другие вопросы по тегам