Описание

вторник, 11 июня 2013 г.

GCC статическая линковка

Недавно столкнулся с такой проблемой. Необходимо было слинковать приложение со статической библиотекой. Статические библиотеки лежат по пути library_folder, в которой лежат еще и динамические библиотеки с одинаковыми именами (например, libmy_lib.a и libmy_lib.so). И вот как я не пробовал линковаться используя -Bstatic всеравно линковалось с динамическими библиотеками... Строка линковки выглядела примерно так:
gcc -o ./my_app ./my_app.o -Bstatic -L./library_folder -lmy_lib

В man gcc написанно, что опция -Bstatic передается линковщику и все будет ок. Но не получалось, какие бы варианты не пробовал... В результате решение было следующим - использовать опцию -Wl, функия которой передать опцию линковщику. Что приводит к такому виду:
gcc -o ./my_app ./my_app.o -Wl,-Bstatic -L./library_folder -lmy_lib
Важно!!! В записи -Wl,-Bstatic после запятой не должно быть пробела.

Конечно еще всегда остается рабочим вариант указания полного пути к библиотеке. Например, так:
gcc -o ./my_app ./my_app.o ./library_folder/libmy_lib.a


Если вы знаете почему не работал первый вариант, то обязательно сообщите.