4

我的任务是向 iOS 应用程序添加一些功能。我查看了 SVN 上的源代码,收到了 100 多个警告(啊),谢天谢地,我只剩下最后一个,即:

Xcode 警告

(被屏蔽的位是客户端名称......)。

我相信这个警告的意思是:“这个 XML 库与构建时链接的操作系统架构不兼容”。

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

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

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

编辑

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

提前致谢。

4

4 回答 4

3

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

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

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

于 2013-03-27T02:26:26.340 回答
1

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

于 2013-03-25T23:31:02.640 回答
0

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

希望这可以帮助!

于 2013-03-27T12:46:34.847 回答
-1

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

于 2013-03-22T13:11:55.817 回答