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


100

我收到以下错误。

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

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


2
当您说已经将其添加到项目中时,您到底做了什么?我认为XCode认为它没有用。
Devin Ceartas 09年

1
如果你有在XCode中这个问题4.6去这里stackoverflow.com/questions/14622684/...
鲍里斯·加富罗夫

更新您的屏幕截图。
用户

Answers:


213

按照指示在这里,在“设置您的项目文件。”

设置项目文件

您需要将libxml2.dylib添加到您的项目中(不要将其放在Frameworks部分中)。在Mac上,您可以在/usr/lib/libxml2.dylibiPhone上找到它,而对于iPhone,则需要该 /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk/usr/lib/libxml2.dylib 版本。

由于libxml2是.dylib(而不是友好的.framework),因此我们还有另外一件事要做。转到项目构建设置(“项目”->“编辑项目设置”->“构建”),然后找到“搜索路径”。在“标题搜索路径”中添加以下路径:

$(SDKROOT)/usr/include/libxml2

另请参阅OP的答案


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找不到(s)。我能做什么?
NicTesla

1
大。谢谢。我错过了“ $(SDKROOT)”,这造成了问题。

86

在Xcode 4.3 / 5/6中添加libxml2

添加libxml2是一个巨大的,肥胖的,挑剔的痛苦。如果要这样做,请在构建项目之前进行。


您需要通过两种方式添加它:

1.目标设定

单击您的目标(而不是您的项目),然后选择Build Phases

单击标题为的显示三角形Link Binary With Libraries。单击+以添加一个库。

滚动到列表底部,然后选择libxml2.dylib。这会将libxml2库添加到您的项目中。

2.项目设置

现在您必须告诉您的项目在哪里寻找它三个次以上。

选择Build Settings tab

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

还有更多。

在同一标签中,向下滚动到该Search Paths部分。

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

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

在后两种情况下,请确保在“调试” 和“发布”中输入了路径。

3.清洁

Product菜单下,选择Clean

然后,如果我是你(让我们面对现实,我可能是),我会退出Xcode并走开。当您返回并启动时,应该会很好。


谢谢,这是唯一适用于Xcode 4.3.3的解决方案
lifjoy 2012年

1
这些分步说明是唯一对我有用的说明(Xcode 4.4.1)。谢谢!
弗兰克(Frank)

工作对我来说没有在Xcode 4.1.1设置框架搜索路径
理查德·加赛德

1
opening import file 'Swift.swift': Not a directory在Xcode 5中执行此操作之后。–
用户

1
我还收到错误“打开模块'Swift'的导入文件:不是目录”。要解决此问题,只需不要在“框架搜索路径”中添加“ /usr/lib/libxml2.dylib”。在我忽略了这一步之后仍然为我工作。
丹尼尔·瑞安

22

对于Xcode 6,我必须执行以下操作:

1)将“ libxml2.dylib”库添加到我的项目的TARGET中(构建阶段->使用库链接二进制文件)

2)将“ $(SDKROOT)/ usr / include / libxml2”添加到TARGET上的标题搜索路径(构建设置->标题搜索路径)

此后,目标应成功构建。


为什么项目设置上的/ usr / include / libxml2不起作用?
Paul Brewczynski 2015年


11

形成@Matt Ball的链接,

我发现以下对我有帮助。

您需要将libxml2.dylib添加到您的项目中(不要将其放在Frameworks部分中)。在Mac上,您可以在/usr/lib/libxml2.dylibiPhone上找到它,而对于iPhone,则需要该/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk/usr/lib/libxml2.dylib版本。

由于libxml2是.dylib(而不是友好的.framework),因此我们还有另外一件事要做。转到项目构建设置(Project->Edit Project Settings->Build),然后找到“ Search Paths”。在“标题搜索路径”中,在Mac上添加以下路径:

 /usr/include/libxml2 

11

Ray Wenderlich的博客文章有关使用gdata解决了此问题。基本上这些简单的步骤:

在XCode中,单击“项目\编辑项目设置”,并确保选中“所有配置”。

找到“搜索路径\标题搜索路径”设置,然后将/ usr / include / libxml2添加到列表中。

最后,找到“链接\其他链接器标志”部分,并将-lxml2添加到列表中。

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


2
在许多地方都找到了这个答案,但是所有人都忘记了这是项目上的Header搜索路径,而不是目标上的搜索路径。非常感谢您正确解释它。
esbenr 2011年

7

我发现相同,我必须为最新的Xcode(4.3.x)添加$(SDKROOT)/ usr / include / libxml2。另外,让我绕了几个小时的事实是我在修改“ TARGET”而不是“ PROJECT”(Xcode的新UI非常复杂,以至于很容易忽略它)。您需要修改项目!


5

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


4

我发现使用xCode 4.3.2时,我必须在Header Search字段中输入$(SDKROOT)/ usr / include / libxml2,而不是简单地/ usr / include / libxml2


4

从Mavericks(OS X 10.9)开始,/ usr / 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,2014年

3

我不确定有什么区别,但是将包含路径添加到项目以及目标。


3

在Mountain Lion上,我遇到了相同的问题,通过添加/usr/include/libxml2包含带有标志“递归”的路径来解决该问题,如果以上所有方法都没有效果,请使用此问题。


2

在升级到Snow Leopard和XCode 3.2之后,重新打开一个项目(该项目是在XCode 3.something on Leopard上开发的)时,我遇到了这个问题。很好奇,它只影响了某些构建(仿真器构建很好,设备错误给了我)。我在/ usr / include中有libxml2,它确实包含libxml / tree.h。

甚至魔术“清洁”也没有用, 但是 “ XCode”菜单(Apple徽标和File之间)下的“ Empty Caches ...”了作用(以前版本中的菜单在那吗?)。弄清楚了我的原因,但是经过一番清理之后,不再有关于libxml / tree.h的投诉了。


2

还将“始终搜索用户路径”选择为“是”。在XCode 4.3.3中,默认情况下为NO


2

请按照以下步骤


  1. 可以在Mac机器上的/usr/lib/libxml2.dylib上找到libxml2 libxml2.dylib。

  2. 更改“标题搜索路径”
    单击[项目名称](在左侧面板中)->项目->构建设置->全选(默认为基本)
    在搜索框中键入标题搜索路径
    双击标题搜索路径-> +- >“ $(SDKROOT)/ usr / include / libxml2”

  3. 将-lxml2添加到“其他链接
    器标志”在步骤2中搜索“其他链接器标志”时,
    单击“其他链接器标志”行。单击“ +”,然后将“ -lxml2”添加到列表中。

  4. 将项目类型更改为ARC->否,即自动引用计数为否您可以按照步骤2中的步骤搜索ARC


2

Xcode 4.5我已经完全使用了CW的解决方案。唯一的例外是$(SDKROOT)/ usr / include / libxml2对我不起作用,我必须在 项目标题搜索路径用户标题搜索路径中添加“ $(SDK_DIR)” / usr / include / libxml2。之后,项目成功构建。

编辑:我在我的项目(称为MyProject)(我的项目使用)中有Google GData项目。GData需要libxml。为了成功构建项目MyProject,我将 “ $(SDK_DIR)” / usr / include / libxml2添加到MyProject的标题搜索路径中,将no添加到GData的标题搜索路径中。如果我没有将其添加到MyProject,则项目不会生成)。



1

Blockquote在Xcode 4.3.x中添加libxml2

添加libxml2是一个巨大的,肥胖的,挑剔的痛苦。如果要执行此操作,请在构建项目之前进行。

这是如何做。

目标设定

单击您的目标(而不是您的项目),然后选择“构建阶段”。单击标题为“ Link Binary With Libraries”的显示三角形。单击“ +”添加一个库。滚动到列表底部,然后选择“ libxml2.dylib”。这样就将libxml2库2添加到您的项目中……但是请稍候。

项目设定

现在,您必须告诉您的项目在哪里可以再查找三次。

选择“构建设置选项卡”。向下滚动到“链接”部分。在项目的列下,双击“其他链接器标志”行。单击“ +”,然后将“ -lxml2”添加到列表中。

还有更多。

在同一标签中,向下滚动到“搜索路径”部分。在“框架搜索路径”行的项目列下,添加“ /usr/lib/libxml2.dylib”。

在“标题搜索路径”和“用户标题搜索路径”行中,添加“ $(SDKROOT)/ usr / include / libxml2”。在后两种情况下,请确保在“调试和发布”中输入了路径。

然后。在“产品”菜单下,选择“清洁”。

这正在工作,也适用于Xcode5!谢谢!


1
这在Xcode 5.0.2中不起作用。我对项目进行了以上更改,但没有运气。你能帮我做什么。
Ganesh 2014年

1

不要将libxml2.dylib放在frameworks文件夹下,而是将它放在根目录下的根目录下(左上方的蓝色图标)

然后单击Project(顶部左蓝色图标),转到Build Settings,在搜索框中键入“ Header Search Paths”,然后添加此“ $(SDKROOT)/ usr / include / libxml2”

此代码解决了我的问题,希望能帮助您解决此问题


1

@Aqib Mumtaz-我按照上面Parris的说明“在Xcode 4.3 / 5/6中添加libxml2”中的说明进行了工作。使用框架搜索路径的步骤不起作用,编译器抱怨。无论如何,对那个家伙大赞!

我正在使用Xcode 6.2b3

不管您使用的Xcode的版本如何,它都是错误的。不要总是假设编译错误是真实的。很多时候,它不遵循标题搜索路径,并且找不到明确列出的内容。更糟糕的是,所产生的错误倾向于将您指向不同的方向,因此您会浪费大量时间来分散注意力。照这样说...

完全按照以下步骤推荐宝宝的步骤:

  1. 创建一个名为“基准测试”的Mac OS X Cocoa项目窗口
  2. 直接在Finder中将XpathQuery添加到项目源目录中
  3. 单击项目窗口的红色关闭按钮下的小文件夹图标
  4. 将XpathQuery(如果包含文件夹,则将其拖动)到项目窗口显示左侧的项目资产中
  5. 将/Applications/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libxml2.2.dylib拖到底部的项目资产中。这将以简单的方式将其添加到“构建阶段”->“将二进制文件与库链接”中
  6. 单击项目资产列中左上方的“基准测试”项目图标
  7. 在“构建设置”下搜索“其他链接器标志”
  8. 在“基准测试”项目图标列下的“其他链接器标志”中添加“ -lxml2”(“ sans”))
  9. 在“构建设置”下搜索“标题搜索”
  10. 在“基准测试”项目图标列下的“标题搜索路径”中添加“ $(SDKROOT)/ usr / include / libxml2”(“ sans”))
  11. 将“ $(SDKROOT)/ usr / include / libxml2”(“ sans”)添加到“基准测试”项目图标列下的“用户头搜索路径”

笔记:

  • 在将搜索路径添加到“标题搜索路径”和“用户标题搜索路径”中之前,我的无法工作。
  • 要在查找器中找到libxml2.2.dylib,您需要右键单击Xco​​de图标,然后选择“显示包联系人”(编辑:多么hack ..将所有垃圾塞入应用程序)
  • 准备更改链接的libxml2.2.dylib。Xcode内部的一个代码专门用于确保Xcode获得它知道的东西并在理论上进行了测试。您稍后可能要在系统中使用dylib(在此线程中阅读)
  • 当我使用Xcode 6.2b3时,我可能有一个较新的libxml2.2.dylib。您的名字可能会略有不同。只需在文件夹中搜索以“ libxml”开头,以“ .dylib”结尾的文件即可。可能还会有一个别名,例如“ libxml2.dylib”。不要立即使用该名称,因为解析别名会在Xcode中“可能存在错误”方程式中添加另一个变量。
  • 为了清楚起见,我对外部库进行了别名,将它们重命名以指示它们是哪一个,并使其与Finder中的项目文件处于同一级别。如果他们更改位置,更改名称等,则别名中将包含“获取信息”,即原始文件的完整路径,以供以后的侦探工作使项目再次编译和链接。(符号链接断开太容易,并且对于Mac而言不自然)
  • 最后一件事,也很重要,请参阅http://www.cocoawithlove.com/2008/10/using-libxml2-for-parsing-and-xpath.html,在这里您可以下载XpathQuery并获得更多好处。

希望这可以帮助。

如果您碰巧正在为退伍军人开发某些东西,比如说iPhone / iPad或Mac应用程序,并且正在使用“ MDWS”或“ VIA”这两种东西,它们是基于SOAP的医疗记录系统接口...请与我联系


0

我在Xcode 8.0 +单元测试项目中分三步解决了

1)我将libxml文件添加到Build Phases.follow此链接

2)我添加了其他链接器标记-ObjC(针对项目和测试项目目标)

3)我将标题搜索路径设置为"${SDKROOT}/usr/include/libxml2"(不要忘记在任何一侧都加双引号)(对于项目和测试项目目标)

其中之一将解决问题。如果不是,则必须同时应用以上三个条件。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.