在 makefile 中包含 -lcurl
Including -lcurl in makefile
我的一个类(解析器)需要 lcurl 库。我安装了libcurl4-gnutls-dev。当我使用 g++ 类在终端中编译一个类时.cpp-lcurl,它工作正常。当我尝试将其包含在 makefile 中时,它不会引发未定义的引用错误。这是我的制作文件,请记住只有解析器需要它。
$GPP = g++ -O3 -Wall
UTILS = ../Utilities
SCANNER = ../Utilities
SCANLINE = ../Utilities
M = Main.o
E = Email.o
P = Parser.o
SL = ScanLine.o
S = Scanner.o
U = Utils.o
LDFLAGS = -lcurl
Aprog: $(M) $(E) $(P) $(SL) $(S) $(U)
$(GPP) -o Aprog $(M) $(E) $(P) $(SL) $(S) $(U)
Main.o: Main.h Main.cpp
$(GPP) -o Main.o -c Main.cpp
Email.o: Email.h Email.cpp
$(GPP) -o Email.o -c Email.cpp
ParseText.o: ParseText.h ParseText.cpp
$(GPP) -o ParseText.o -c ParseText.cpp -lcurl
ScanLine.o: $(SCANLINE)/ScanLine.h $(SCANLINE)/ScanLine.cpp
$(GPP) -o ScanLine.o -c $(SCANLINE)/ScanLine.cpp
Scanner.o: $(SCANNER)/Scanner.h $(SCANNER)/Scanner.cpp
$(GPP) -o Scanner.o -c $(SCANNER)/Scanner.cpp
Utils.o: $(UTILS)/Utils.h $(UTILS)/Utils.cpp
$(GPP) -o Utils.o -c $(UTILS)/Utils.cpp
clean:
rm *.o
rm Aprog
echo "Clean"
谢谢
您必须在
链接行中包含-lcurl
。在您的情况下,您指定一个显式链接命令(而不是为此依赖默认规则),因此不考虑LDFLAGS
。用:
Aprog: $(M) $(E) $(P) $(SL) $(S) $(U)
$(GPP) -o Aprog $(M) $(E) $(P) $(SL) $(S) $(U) -lcurl
你用'-c'选项运行g++,如下所示:
ParseText.o: ParseText.h ParseText.cpp
$(GPP) -o ParseText.o -c ParseText.cpp -lcurl
-c 选项表示"编译或组装源文件,但不链接",因此添加 -lcurl 根本不会执行任何操作。对 curl 函数的引用在 ParseText.o 文件中仍作为未解析的引用。
您需要将 -lcurl 添加到链接阶段,这是 makefile 中的规则"Aprog"。此规则从各个翻译单元(即.cpp文件)中获取所有目标文件并将它们链接在一起,然后将链接添加到您指定的任何库中。
Aprog: $(M) $(E) $(P) $(SL) $(S) $(U)
$(GPP) -o Aprog $(M) $(E) $(P) $(SL) $(S) $(U) -lcurl
或者,由于您已经设置了变量 LDFLAGS,因此您可以使用:
Aprog: $(M) $(E) $(P) $(SL) $(S) $(U)
$(GPP) -o Aprog $(M) $(E) $(P) $(SL) $(S) $(U) $(LDFLAGS)
<</div>
div class="answers"> 尝试使用 LDLIBS = -lcurl
而不是 LDFLAGS
。如果这不起作用,请将$(LDFLAGS)
放在gcc
调用的末尾。
$(GPP) -o Aprog $(M) $(E) $(P) $(SL) $(S) $(U) $(LDFLAGS)
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- c++库的公共头文件中应该包含什么
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 使用mongocxx驱动程序时包含头文件问题
- 如何在h文件中包含.o对象文件
- 在混合代码库中将C转换为C++时出现许多包含错误
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- cmath抛出错误C2062、C2059、C2143和C2447.cmath包含在矢量文件中
- 为什么您需要C++头文件的包含保护
- 无法在UE4中包含BP类到CPP类
- g++ 说函数不存在,即使包含正确的标头
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- Visual C++GC接口如何启用它以及要包含哪个库
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 在 makefile 中包含 -lcurl