【发布时间】:2014-12-09 16:24:54
【问题描述】:
我不习惯制作 makefile。我的旧项目有所有的makefile,我正在从头开始做一个小测试,其中包含很多我不习惯的罐装lib依赖项。好几年没看makefile了。
我有一个名为 libopcTest 的目录,其中包含以下内容:
LibOPCTest.cc
LibOPCTest.h
makefile
makefile 里面有这个:
INC=-I/usr/include/libxml2/libxml
LIB=-L/usr/include/libxml2/libxml
all: LibOPCTest.exe
LibOPCTest.exe: LibOPCTest.o
>tab> gcc -o LibOPCTest.exe LibOPCTest.o
LibOPCTest.o: LibOPCTest.cpp
>tab> gcc -c $(INC) $(LIB) LibOPCTest.cpp
clean:
>tab> rm LibOPCTest.o LibOPCTest.exe
我查看了 /usr/include/libxml2/libxml,其中确实包含 xmlstring.h。我在 opc.h 中没有看到 libxml 引用,但显然这就是它的来源,大概在一个包含文件中,比如 config.h。
另外,我们有 LibOPCTest.cpp,其中 #includes <opc/opc.h> 和它自己的 .h 文件。
main 在 LibOPCTest.cpp 中。
当我在 Linux 命令提示符下键入 make 时,我收到以下错误:
In file included from /usr/include/opc/opc.h:36:0, from LibOPCTest.cpp:1:
/usr/include/opc/config.h:37:30: fatal error: libxml/xmlstring.h: no such file or directory.
我不应该在 makefile 中将带有 LIB 和 INC 定义的 libxml 指向 libxml 吗?我认为我不应该向 opc.h 添加任何内容,包括构建它,因为它是一个罐装库。
我在看这个makefile example,我想我有我需要的一切(可能没有,因为它没有建立)。
我知道这是一个基本问题,但希望有人能提出好的建议。感谢您提前做好准备!
【问题讨论】:
-
如果您告诉 GCC 在
/usr/include/libxml2/libxml中查找标头,那么它会。而且那里没有libxml/xmlstring.h文件。您可能想改写-I/usr/include/libxml2。 (编译器总是是正确的,在将随机代码敲入 Makefile 之前,您需要考虑一下事情的含义。)此外,您的-L标志是无稽之谈;为什么链接器会关心头文件?那很可能是-L/usr/lib或者它的子目录。 -
其实用
pkg-config --cflags libxml-2.0和pkg-config --libs libxml-2.0就行了 -
@011c - makefile 中有吗?在哪里?我修复了 TheParamagneticCroissant 的建议,它有大量未定义的对愚蠢的东西的引用,比如 operator delete,以及 xmlStrcmp、xmlTextREaderConstValue 等......显然有些不对劲。
-
在 Paramagnet 的回答之后,您的编译时错误可能已经消失了。您现在得到的是链接时间错误。只需为指向您的 libxml 和默认库路径的 LIB 变量提供适当的参数即可
-
感谢您的想法!