编译器找不到 libxml/parser.h

Posted

技术标签:

【中文标题】编译器找不到 libxml/parser.h【英文标题】:Compiler can't find libxml/parser.h 【发布时间】:2015-07-03 01:50:59 【问题描述】:

我使用的是 Debian 8 (Jessie),64 位。我安装了libxml2-dev,现在位于/usr/include/libxml2/libxml

但是当我这样做时(就像libxml docs 所说)

#include <libxml/parser.h>

我只在编译时得到(使用gcc

fatal error: libxml/parser.h: no such file or directory

注意:在另一台机器上,使用旧的 64 位 Suse,其中libxml2-dev 位于完全相同的路径中,与新的 Debian 相比,没有设置其他环境变量,它工作得非常好。使用完全相同的 makefile 从一台计算机迁移到另一台计算机时出现问题。 所有 我需要的其他 -dev 库在迁移后(它们都安装了 apt-get)后才工作(它们记录在案的 #include &lt;path&gt;),只有 libxml2-dev 在编译时找不到。

我是否需要做其他事情才能使libxml2-dev 可见?

【问题讨论】:

【参考方案1】:

尝试在parser.h 文件所在的位置显式包含编译,即像这样的smth

g++ -I/usr/include/libxml2/


以下环境变量也可用于查找头文件

CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH

查找更多信息here

【讨论】:

嗯,这很明显。但是,当使用完全相同的 makefile 位于完全相同的位置时,可能是在一个系统上找到 lib 而在另一个系统上找不到 lib 的原因? 显然INCLUDE_PATH 环境变量没有更新为还包括/usr/include/libxml2/ 只需通过echo $INCLUDE_PATH查看即可 这个变量在两台机器上根本不存在。 还有C_INCLUDE_PATH ?【参考方案2】:

如果您安装了它:sudo apt-get install libxml2-dev libxml2-doc 进入 /usr/include/libxml2 并复制或移动该文件夹中的所有内容到以下级别:cp -R libxml/ ../ 之后它对我有用。

【讨论】:

【参考方案3】:

您应该使用pkg-config 将参数传递给编译器。像这样

g++ `pkg-config --cflags libxml-2.0` example.c -o example.o

和链接器:

g++ `pkg-config --libs libxml-2.0` example.o -o example

【讨论】:

【参考方案4】:

我在 Centos 系统上遇到了同样的问题。我通过执行以下操作解决了它:

yum install libxml2-devel
cd /usr/include
ln -s libxml2/libxml .

就是这样。无需更改环境变量或编译器开关。

【讨论】:

以上是关于编译器找不到 libxml/parser.h的主要内容,如果未能解决你的问题,请参考以下文章

AndroidStudio 很多类红色高亮找不到,可以编译运行

编译java文件时提示找不到包

打字稿编译器找不到带有纱线的节点-找不到“节点”的类型定义文件

java编译 为啥显示找不到文件

编译时找不到动态库

写了一段java程序,编译时提示找不到符号,请问该怎么修改