Указание gcc напрямую связать библиотеку статически


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

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

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

2 83

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).