文件 libxml/tree.h 不存在

100

我遇到了如下错误。

libxml/tree.h没有这个文件或目录

我已经将libxml2.dylib添加到我的项目中,但是我仍然遇到这种麻烦。请帮帮我。


2
当你说你已经将它添加到你的项目中时,你具体做了什么?我不认为XCode认为它起作用了。 - Devin Ceartas
1
如果您在XCode 4.6中遇到此问题,请访问此处https://dev59.com/umUq5IYBdhLWcg3wSehm - Boris Gafurov
更新你的截图。 - User
22个回答

214

请按照这里的指示,在“设置项目文件”下进行操作。

设置项目文件

您需要将libxml2.dylib添加到项目中(不要放在“框架”部分)。 在Mac上, 您可以在/usr/lib/libxml2.dylib找到它,在iPhone上, 您需要使用 /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk/usr/lib/libxml2.dylib 版本。

由于libxml2是一个.dylib文件(而不是友好的.framework文件),我们还需要做一件事。 进入项目构建设置 (项目 -> 编辑项目设置 -> 构建),找到“搜索路径”。 在“头文件搜索路径”中添加以下路径:

$(SDKROOT)/usr/include/libxml2
也请参阅问问题者的回答

12
当它要求您将"/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk/usr/include/libxml2"添加到头文件搜索路径时,请不要这样做。请添加"/usr/include/libxml2"。这将使您的项目独立于特定的SDK。 - cdespinosa
只要在 /usr/include 中确实有符号链接,那就可以这样工作。我还没有尝试安装libxml2,因此无法确认默认行为。但是,是的,用这种方式链接它要好得多。 - Matt Ball
1
在XCode下开发时,GCC使用-isysroot选项来重新定位SDK的根目录。如果您将/usr/include/libxml2添加到头文件搜索路径中,则会在编译时将其转换为当前SDK内部的usr/include/libxml2文件夹。 - Laurent Etiemble
当我将"$(SDKROOT)/usr/include/libxml2"设置为头文件搜索路径(XCode 4.2)时,它会显示:“OBJC_METACLASS$UIResponder”,引用自: 在MyDemoAppDelegate.o中的_OBJC_METACLASS$_D2GAppDelegate ld:无法找到i386体系结构的符号。我该怎么办? - NicTesla
1
太好了,谢谢。我缺少了 '$(SDKROOT)',这导致了问题。 - user865155
不确定为什么,但我不得不在目标设置中添加此项($(SDKROOT)/usr/include/libxml2”),而不是项目构建设置。 - Sourabh Bhardwaj

86

在 Xcode 4.3 / 5 / 6 中添加 libxml2 库

添加 libxml2 库非常麻烦,如果你要添加,请在项目构建过程中尽早添加。


需要通过两种方式添加:

1. 目标设置

选择你的目标(不是你的项目),然后选择 Build Phases

点击标题为 Link Binary With Libraries 的三角形图标,再点击 + 添加库。

滚动到列表底部,选择 libxml2.dylib。这样就将 libxml2 库添加到项目中了。

2. 项目设置

现在你需要告诉你的项目在哪里寻找它,需要添加三次

选择 Build Settings 选项卡。

Linking 部分中向下滚动。 在项目列下双击 Other Linker Flags 行。 点击 + 并将 -lxml2 添加到列表中。

仍然需要进行更多操作。

在同一选项卡中,向下滚动至 Search Paths 部分。

在项目列下的 Framework Search Paths 行中添加 /usr/lib/libxml2.dylib

Header Search PathsUser Header Search Paths 行中添加 $(SDKROOT)/usr/include/libxml2

在这最后两种情况下,请确保路径在 Debug 和 Release 中输入。

3. 清理

Product 菜单中选择 Clean

所以,如果我是你(面对现实吧,我很可能就是),我会退出Xcode并离开。当你回来并启动时,你应该可以开始了。


1
这些逐步说明是唯一对我起作用的(Xcode 4.4.1)。谢谢! - Frank
在我的xCode 4.6.3上运行正常。谢谢! - capikaw
在添加了一个名为“始终搜索用户路径=是”的设置后,它对我起作用了! - i_Intiution
1
在 Xcode 5 中执行此操作后,出现“打开导入文件'Swift.swift':不是目录”的错误。 - User
1
我也遇到了错误“打开模块'Swift'的导入文件:不是目录”。要解决这个问题,只需不将“/usr/lib/libxml2.dylib”添加到“Framework Search Paths”中即可。即使我忽略了这一步骤,它仍然对我有效。 - Daniel Ryan
显示剩余8条评论

22

对于 Xcode 6,我需要执行以下操作:

1)向项目的TARGET中添加“libxml2.dylib”库(Build Phases -> Link Binary With Libraries)

2)在TARGET的Header Search Paths中添加“$(SDKROOT)/usr/include/libxml2”(Build Settings -> Header Search Paths)

完成这些步骤后,项目应该可以成功构建。


为什么项目设置中的 /usr/include/libxml2 不起作用? - Paweł Brewczynski

19
您还需要将/usr/include/libxml2添加到您的包含路径中。

11

Ray Wenderlich的一篇博客文章介绍了使用gdata解决此问题的方法。基本上有以下简单步骤:

在XCode中,点击Project\Edit Project Settings ,确保选中 “All Configurations”。

找到 Search Paths\Header Search Paths设置,并将 /usr/include/libxml2 添加到列表中。

最后,找到 Linking\Other Linker Flags 部分并将 -lxml2 添加到列表中。

原始文章:使用gdataxml读取和写入xml文档


2
在许多地方找到了这个答案,但它们都忘记提到它是项目中的头文件搜索路径,而不是目标。非常感谢您正确解释了它。 - esbenr

11

从@Matt Ball的链接中,我发现以下内容对我很有帮助。

您需要将libxml2.dylib添加到您的项目中(不要把它放在框架部分)。在Mac上,您可以在/usr/lib/libxml2.dylib找到它,在iPhone上,您需要使用/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk/usr/lib/libxml2.dylib版本。

由于libxml2是一个.dylib文件(不是一个友好的.framework文件),我们还需要做一件事。进入项目构建设置 (Project->Edit Project Settings->Build) 并查找"Search Paths"。在"Header Search Paths"中,添加以下路径:

 /usr/include/libxml2 

7
我发现相同的问题,我必须为最新的Xcode(4.3.x)添加$(SDKROOT)/usr/include/libxml2。此外,让我困扰了几个小时的事实是我修改了“TARGET”而不是“PROJECT”(Xcode的新用户界面非常复杂,很容易忽略这一点)。您需要修改项目!

5

另一个解决方案。在头文件搜索路径等所有步骤中执行,并确保您在项目设置中选择的配置是正确的。当您双击项目构建设置时,可能正在更改分发设置,但您正在尝试在“调试”设置中添加头文件搜索路径。因此,请确保您处于正确的设置中或选择所有设置。


4

从 Mavericks (OS X 10.9) 开始,/usr/include 目录已经被删除。这里的一半答案已经过时了,因为在你解决 include 目录之前,应用程序将无法编译。

我通过在终端中创建到 MacOSX SDK 的符号链接来解决了这个问题,使用以下命令:

sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include /usr/include

应用程序现在可以再次编译。


正是我所需要的。这个完美地运行了。只需确保在您的头文件搜索路径中放置 /usr/include/libxml2。 - Josh Bernfeld

4
我发现在 xCode 4.3.2 中,我需要将 $(SDKROOT)/usr/include/libxml2 输入到“Header Search”字段中,而不是简单地输入 /usr/include/libxml2。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接