У меня есть файл makefile, который успешно создает * .obj-файлы. После того, как я дойду до связующей части, у меня есть много ошибок до undefined reference
.C++ makefile - linker не найти внешнюю библиотеку
CC = g++
INCLUDE_DIRS = -I/usr/include/freetype2/ -I../MyLibs/ \
-I../MyLibs/svg/
LIB_DIRS = -L./ -L../MyLibs/ -L/usr/lib64/ -L/usr/lib64/mysql/
LIBS = -lMyUtils -lfreetype -lmysqlclient -lsqlite3
CFLAGS = -std=c++11 -lm -lpthread -lstdc++ -ldl -Wall -O2 \
$(INCLUDE_DIRS)
OBJ = *** list of obj files ***
BIN = my_program
$(BIN): $(OBJ) $(OBJ)
$(CC) $(CFLAGS) $(LIB_DIRS) $(LIBS) $^ -o [email protected]
Я не могу видеть, что может быть неправильным. MyUtils - это статическая библиотека, которую я также создаю с использованием другого make-файла (если я смотрю внутри с ar
, я вижу все присутствующие объекты). Кроме того, я использовал одну и ту же библиотеку для создания другого проекта (динамической библиотеки), и сборка была правильно завершена.
A am using gcc 4.7.2 под CentOS 6.5.
Для меня '$ (CFLAGS) $ (LIB_DIRS) $ (LIBS)', когда первый и третьи переменные содержат параметр '-l', но вторая переменная содержит' -L' выглядит подозрительно. Можете ли вы попробовать '$ (LIB_DIRS) $ (CFLAGS) $ (LIBS)'? – Gluttton
@Gluttton Я переместил все -l вместе и все -L, но проблема остается –
Странно перечислить '$ (OBJS)' дважды в списке зависимостей для '$ (BIN)'. Я не знаю, вызвало бы это проблемы компиляции, но это, вероятно, вызовет проблемы с ссылками. – nobar