[英]g++ doesn't include libs
我正在尝试使用 g++ 构建一个程序,但我收到了“未定义的引用”。
文件夹结构:
Makefile
libs/
libcrypotpp.a
libz.a
sources/
here are the sources and headers
out/
objfiles/
Makefile 如下所示:
#makefile for program
#needs libz.a and libcryptopp.a
CC = g++
SOURCES = sources/*.cpp
LIBS = -lcryptopp -lz -pthread
LIBPATH = libs/
OBJPATH = objfiles/
OUTPUT = out/
OBJS = *.o
HEADERPATHS = -Isources -Isources/cryptopp
all:
echo "Program"
echo "------------------"
ifneq ("$(wildcard libs/libz.a)", "")
echo "ZLIB found!"
ifneq ("$(wildcard libs/libcryptopp.a)", "")
echo "Cryptopp found!" #all librarys found
$(CC) $(HEADERPATHS) -L$(LIBPATH) $(LIBS) $(SOURCES)
mv *.o $(OBJPATH)
else
echo "error: Cryptopp(libs/libcryptopp.a) was not found!"
endif
else ifneq ("$(wildcard libs/libcryptopp.a)", "")
echo "Cryptopp found!"
echo "error: ZLIB(libs/libz.a) was not found!"
else
echo "error: ZLIB(libs/libz.a) was not found!"
echo "error: Cryptopp(libs/libcryptopp.a) was not found!"
endif
.SILENT: all
g++ 编译,但随后输出未定义的引用:
为什么会失败?
由于(静态)库可能包含许多在大多数链接到它们的应用程序中未使用的代码,因此链接器往往对它们将链接到应用程序的静态库的哪些部分非常保守。
在某些情况下,这会使我们作为开发人员的生活变得更加困难,因为您必须遵循不成文的规则才能让一切顺利进行。 其中一些不成文的规则是
结果是,为了让链接器满意,应最后指定库,如果库 A 依赖于库 B,则应在 B 之前指定 A。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.