【问题标题】:Cannot compile when using libxml使用 libxml 时无法编译
【发布时间】:2011-04-04 20:39:54
【问题描述】:

我有一个可以通过终端运行的源文件

gcc source.c -I/usr/include/libxml2 -lxml2 -o output

但是当我 #include 包含 libxml 源文件的源文件时,编译器抱怨找不到 libxml/xmlmemory.h:libxml/parser.h:libxml/xpath.h:没有这样的文件或目录。

【问题讨论】:

    标签: c libxml2


    【解决方案1】:

    您需要始终在 gcc 语句中保留 -I/usr/include/libxml2,以便它可以找到头文件。

    【讨论】:

    • 如果这个文件需要编译成一个更大的系统的一部分怎么办?我应该将所需的文件复制到保存此源文件的目录中吗?
    • 啊哈。我希望您不包括 your 头文件中的头文件。那会很糟糕。确保您仅在内部依赖 libxml2(在您的编译单元中,即 .c/.cxx/.cpp 文件)
    • 我包含在 .c 文件中。但不起作用。我没有 libxml 文件与我正在编译的 .c 位于同一目录中
    • @Helium3,是的,任何需要使用 libxml 的 c 文件都必须使用 -I 选项进行编译。
    【解决方案2】:

    您还可以使用xml2-config --cflags --libs 检索要添加的编译标志。

    kjp@vbox:~/Dev/ScratchDir$ xml2-config --cflags --libs
    -I/usr/include/libxml2
    -lxml2
    kjp@vbox:~/Dev/ScratchDir$
    

    【讨论】:

      【解决方案3】:

      似乎源引用的是 libxml,而不是 libxml2 你能验证一下吗

      /usr/include/libxml2/libxml/xmlmemory.h
      

      实际上是可访问的吗? (尝试查看)

      您无需编译标头,标头只需作为库实现内容的“描述”即可访问

      【讨论】:

      • 是否有可能因为与正在编译的代码不在同一个文件夹中而无法找到这些文件?我像这样包含 #include 。我没有指定 /usr/include/libxml2/libxml
      • 这就是 -I/usr/include/libxml2 的作用
      • 那么在编译时不调用 I/usr/include/libxml2 -lxml2 怎么办?
      • 你为什么要这样做?如果您认为它乏味,请制作一个编译脚本/makefile。使用绝对路径会让你的代码无法移植到其他机器上
      • 问题是我的代码是一个更大的系统的一部分。它是一个嵌入式项目,系统有多个部分。所以它不应该用大量的命令行参数来编译。所以我应该写一个makefile?
      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2011-08-15
      • 2015-07-03
      • 2019-01-16
      • 2011-02-27
      • 1970-01-01
      相关资源
      最近更新 更多