2013-03-20 124 views
4

我已被赋予向iOS应用程序添加一些功能的任务。我检查了源SVN到超过100个警告(哎呀),幸运的是我到最后一个,这是映入眼帘:Xcode警告:忽略文件libxml2.2.dylib,为不支持的文件格式构建而不是正在链接的体系结构

Xcode warning

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

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

随着下一个版本的发布,我们仅支持iOS5和iPhone 4及更高版本(而不是iOS和更低版本的iPhone)。

那么我应该改变链接架构吗?什么是链接架构?我该如何改变架构?或者我完全走错了路?

可能值得一提的是,我运行的是最新的Xcode,我从Xcode列表中添加了框架(链接二进制库)。

编辑

从模拟器构建时,我只得到了消息。它不会造成任何伤害,只会让我失望!

在此先感谢。

+0

在您的项目中添加libxml2.2.dylib或http://stackoverflow.com/questions/5220435/file-was-built-for-i386-which-is-not-the-architecture-being-linked-x86 -64-whil – iPatel 2013-03-25 15:29:26

回答

3

不要链接到libxml2.2.dylib,而是链接到libxml2.dylib。与此相关联可以确保您始终与您的体系结构的正确实施链接。

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

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

+0

库之间有区别吗?我没有写这个代码,并且从来没有使用这个库。 – 2013-03-27 10:59:35

+0

这是有效的,但我认为这不足以解释赏金。如果你扩大你的答案,说出它失败的原因,为什么2有效但不是2.2我会奖励它。谢谢! – 2013-03-27 11:05:06

+0

赏金获奖。谢谢。 – 2013-03-28 12:39:28

-1

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

1

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

+0

我已经从Xcode列表中添加了框架(链接二进制库)。从模拟器构建时我只会收到消息。它不会造成任何伤害,只会让我失望! – 2013-03-27 09:37:02

0

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

希望这会有所帮助!

相关问题