我在 Debian 8 (Jessie) 上,64 位。我安装了libxml2-dev
,现在它位于/usr/include/libxml2/libxml
.
但是当我这样做时(就像libxml
文档所说的那样)
#include <libxml/parser.h>
我只在编译时得到(用gcc
)
fatal error: libxml/parser.h: no such file or directory
注意:在另一台机器上,使用旧的 64 位 Suse,libxml2-dev
位于完全相同的路径中,并且与新的 Debian 相比没有设置其他环境变量,它工作得很好。使用完全相同的生成文件从一台计算机迁移到另一台计算机时出现问题。我需要的所有其他-dev
库在迁移后都只是工作(及其记录#include <path>
)(它们都是用apt-get
安装的),只有编译时找不到libxml2-dev
。
我是否需要执行其他操作才能使libxml2-dev
可见?
如果您安装了它: sudo apt-get install libxml2-dev libxml2-doc
进入/usr/include/libxml2
,并在以下级别复制或移动该文件夹中的所有内容: cp -R libxml/ ../
在这之后对我来说它有效。
parser.h
文件所在的位置使用显式包含进行编译,即像这样 smth
g++ -I/usr/include/libxml2/
以下环境变量也可用于查找头文件
CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
在此处查找更多信息
我在 Centos 系统上遇到了同样的问题。 我通过执行以下操作解决了它:
yum install libxml2-devel
cd /usr/include
ln -s libxml2/libxml .
就是这样。不更改环境变量或编译器开关。
你应该使用 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
我在 Ubuntu 20.04 中遇到了同样的问题将/usr/include/libxml2 重命名为/usr/include/libxml2_bak对我有用。
是的。对我来说,跨多个操作系统版本的问题是使用 apt-get 安装的软件包将代码放入文件夹中
/usr/include/libxml2/libxml/
您不能只是将 libxml 代码向上移动一个目录,并使用 libxml2/headerfile.h 引用包含标头,因为某些代码文件是预先构建的,以使用 libxml 包含路径。
我能够使用符号链接毫无问题地修复它。
cd /usr/include
sudo ln -s /usr/include/libxml2/libxml/ ./libxml
这将使您可以仅使用简单的
gcc main.c -lxml2