Xcode警告:忽略文件libxml2.2.dylib,它是为不受支持的文件格式构建的,而不是被链接的体系结构

时间:2013-03-20 10:42:13

标签: ios xcode architecture xcode4 compiler-warnings

我被赋予了为iOS应用添加一些功能的任务。我检查了SVN上的消息来源,发出超过100个警告(argh),谢天谢地,我到了最后一个,这是:

Xcode warning

(被阻止的位是客户端名称......)。

我相信这个警告说的是:'这个XML库与构建时链接的OS体系结构不兼容'。

在下一个版本中,我们仅支持iOS5和iPhone 4及更高版本(而不是较低版本的iOS和较旧的iPhone)。

那么我是否要更改链接架构?什么是链接架构?如何更改架构?还是我完全走错了路?

值得一提的是,我正在运行最新的Xcode,我已经从Xcode列表中添加了框架(链接二进制文件与库)。

修改

我只在从模拟器构建时收到消息。它不会造成任何伤害,只是让我感到高兴!

提前致谢。

4 个答案:

答案 0 :(得分:3)

不要链接libxml2.2.dylib,而是链接libxml2.dylib。与之链接应确保始终与您的体系结构的正确实现相关联。

作为一般规则,在您的应用程序中链接到库的通用版本而不是特定版本。在这种情况下,这意味着libxml2而不是libxml2.2。

您正在链接到(符号链接到)动态库,它在运行时将自动指向当前操作系统版本和体系结构的正确实现。链接到库的特定版本并不能保证这一点,并且最终可以链接到只有一个体系结构的东西。因此,在开发过程中,如果你在定位模拟器时链接到libxml2.2.dylib,你可能会链接到i386,那么当你定位设备时,它无法找到正确的架构(因为它是's)试图将i386用于armvWhatever,这正是你所说的。)

答案 1 :(得分:1)

如果您尝试使用libxml2.2,它已在Xcode中使用。而不是从外部源获取它(Apple不会让你使用动态库),将它在Xcode中添加到您的框架中,然后通过在/usr/lib/libxml2/中添加Header Search Paths来链接它。不要将您的项目与Apple提供的dylib链接,否则您的应用将被拒绝。此外,体系结构i386不是iOS的体系结构,因为iOS使用armv7armv7s体系结构来处理其设备的较新版本,这就是您获取体系结构警告的原因

答案 2 :(得分:0)

基本上libxml2.2和libxml2之间的区别在于libxml2.2指向libxml的特定版本/实现,而libxml2是指向XCode可以找到的libxml2的最新版本和正确体系结构的快捷方式/符号链接。因此,在添加这样的框架时,您应该始终添加'通用版本'它的(符号链接)(libxml2)而不是'特定的版本'它(libxml2.2),因为你看到了确切的问题。

希望这有帮助!

答案 3 :(得分:-1)

这就是说你要连接到为386而不是手臂建造的东西。 您将需要一个不同的dylib链接或进入项目设置并更改拱门。 (如果你正在构建dylib) 可能包括arm7或类似的。