我有一個makefile成功構建* .obj文件。在到達鏈接部分後,我對undefined reference
有很多錯誤。C++ makefile - 鏈接器找不到外部庫
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是靜態庫,我也使用不同的生成文件(如果我看看ar
,我看到所有的obj存在)。另外,我使用相同的庫來構建另一個項目(動態庫),並且構建已正確完成。
我在CentOS 6.5下使用gcc 4.7.2。
對我來說,'$(CFLAGS)$(LIB_DIRS)$(LIBS)'當第一和第三個變量包含'-l'選項,但第二個變量包含'-L'看起來很可疑。你可以試試'$(LIB_DIRS)$(CFLAGS)$(LIBS)'? – Gluttton
@Gluttton我已經將所有-l和所有-L都移動了,但是問題仍然存在 –
奇怪的是在$(BIN)''的依賴列表上列出$(OBJS)'兩次。我不知道這是否會導致編譯問題,但它可能會導致鏈接問題。 – nobar