функций - статическая библиотека 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 который можно найти для поиска библиотек». Я вижу три возможности:

  1. У вас есть такой подкаталог, содержащий libmine.a , и в этом случае вам также нужно добавить -lmine в линию компоновщика (после объектных файлов, которые ссылаются на библиотеку).
  2. У вас есть файл libmine который является статическим архивом, и в этом случае вы просто перечисляете его как файл ./libmine без -L впереди.
  3. У вас есть файл libmine.a в текущем каталоге, который вы хотите получить. Вы можете либо написать ./libmine.a либо -L . -lmine -L . -lmine и оба должны найти библиотеку.

CXXFLAGS = -O3 -o prog -rdynamic -D_GNU_SOURCE -L./libmine
LIBS = libmine.a -lpthread 




x86-64