gpt4 book ai didi

c++ - g++ 不包括库

转载 作者:行者123 更新时间:2023-11-30 04:23:05 25 4
gpt4 key购买 nike

我正在尝试使用 g++ 构建程序,但我收到“ undefined reference ”。

文件夹结构:

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++ 编译,但随后输出 undefined reference :

undefined references

为什么会失败?

最佳答案

由于(静态)库可能包含许多代码,这些代码在大多数链接到它们的应用程序中仍未使用,因此链接器对于将静态库的哪些部分链接到应用程序中往往非常保守。

在某些情况下,这会使我们作为开发人员的生活变得更加困难,因为您必须遵循不成文的规则才能使一切正常运行。其中一些不成文的规定是

  • 链接器按照在命令行中给出的顺序处理其输入
  • 链接器只在第一次传递输入时考虑库这两个组合的效果是,库只能解析在链接器的早期输入中找到的未解析符号。

结果是,为了让链接器满意,库应该最后指定,如果库 A 依赖于库 B,则 A 应该在 B 之前指定。

关于c++ - g++ 不包括库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13528343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com