функций - статическая библиотека c++
Как включить статическую библиотеку в make-файл (3)
В -L
просто указывается путь, где можно найти файл .a
или .so
. То, что вы ищете, это добавить -lmine
к переменной LIBS
.
Сделайте это -static -lmine
чтобы заставить его выбрать статическую библиотеку (в случае существования как статической, так и динамической библиотеки).
У меня есть следующий make-файл
CXXFILES = pthreads.cpp
CXXFLAGS = -O3 -o prog -rdynamic -D_GNU_SOURCE -L./libmine
LIBS = -lpthread -ldl
all:
$(CXX) $(CXXFILES) $(LIBS) $(CXXFLAGS)
clean:
rm -f prog *.o
Я пытаюсь включить библиотеку ./libmine
в CXXFLAGS
, но кажется, что это не правильный способ включить статическую библиотеку, потому что когда я компилирую программу, я получаю много неопределенных ссылок на ошибку. Итак, что на самом деле является правильным способом включить статическую библиотеку в make-файл?
Убедитесь, что перед параметром -l
появляется опция -L
; порядок опций в командной строке линкера имеет значение, особенно со статическими библиотеками. Параметр -L
указывает каталог для поиска библиотек (статический или общий). Параметр -lname
указывает библиотеку с libmine.a
(static) или libmine.so
(используется для большинства вариантов Unix, но для Mac OS X используются .dylib
и HP-UX, используемые для использования .sl
). Обычно статическая библиотека будет находиться в файле libmine.a
. Это соглашение, а не обязательное, но если имя не находится в формате libmine.a
, вы не можете использовать нотацию -lmine
чтобы найти его; вы должны явно указать его в командной строке компилятора (компоновщика).
Опция -L./libmine
говорит: «существует подкаталог libmine
который можно найти для поиска библиотек». Я вижу три возможности:
- У вас есть такой подкаталог, содержащий
libmine.a
, и в этом случае вам также нужно добавить-lmine
в линию компоновщика (после объектных файлов, которые ссылаются на библиотеку). - У вас есть файл
libmine
который является статическим архивом, и в этом случае вы просто перечисляете его как файл./libmine
без-L
впереди. - У вас есть файл
libmine.a
в текущем каталоге, который вы хотите получить. Вы можете либо написать./libmine.a
либо-L . -lmine
-L . -lmine
и оба должны найти библиотеку.
CXXFLAGS = -O3 -o prog -rdynamic -D_GNU_SOURCE -L./libmine
LIBS = libmine.a -lpthread