我有一个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