iOS - 升级到Xcode 4.5后的链接器错误,可能与Core Plot相关

时间:2012-09-13 16:49:14

标签: iphone ios xcode linker core-plot

我刚刚升级到Xcode 4.5GM并整理了我的iPhone项目中的一些屏幕,以应对iPhone 5上额外的屏幕尺寸。该项目的目标是iOS 5.1,我刚刚来到为我的手机构建它,我收到此链接器错误:

  

文件是通用的(2个切片),但不包含(n)armv7s切片:   /Users/JonathanW/Documents/MyXcode/myApp/myApp/CorePlot/libCorePlot-CocoaTouch.a   对于架构armv7s

我在我的项目中使用Core Plot 1.0静态库,直到现在还没有任何问题。环顾四周,我可以看到与构建体系结构设置类似的错误,但不知道从何处开始。该项目在模拟器中工作正常(iOS 5.1iOS 6)。有什么想法吗?

10 个答案:

答案 0 :(得分:15)

从外观上看,你需要使用Xcode 4.5GM重建libCorePlot库,以便有一个ARMV7S版本的库。似乎它正在尝试使用您使用较旧的Xcode构建的版本。

答案 1 :(得分:7)

我也在我的项目中使用Core Plot 1.0静态库。我能够通过将 仅构建活动架构 设置为 来解决此问题。 仅构建活动架构位于Xcode中Target的构建设置架构部分。

我下载了Core Plot 1.0 zip文件,该文件似乎不完整,因此无法重建库。

答案 2 :(得分:4)

它在模拟器中工作,因为模拟器将始终使用i386架构。新的SDK没有改变。改变的是iPhone 5的存在,它采用了新的架构(armv7s)。您的应用程序项目自动将armv7s添加为有效的体系结构,但该库可能在​​不知情的情况下编译。因此,您的arm7s启用的应用程序尝试链接到没有armv7s构建的库并失败。

要修复它,您只需要访问生成库的项目。修改目标上的“有效体系结构”设置以包含armv7s,然后重建。

答案 3 :(得分:2)

我几天来一直在努力解决这个问题,最后通过创建一个新的静态库成功地实现了它。

我通过以下说明使用了Mercurial源代码控制系统:Create a static library using Mecurial和来自维基的“核心图静态库安装”:How to do a Static Library Install of Core-Plot

我正在为像我这样的人发帖,经验不足,因为这很简单并且自我解释。

答案 4 :(得分:0)

你做了干净和重建吗?还要检查架构中是否有armv6和armv7。您可能需要重新编译目标并将库重新添加到目标

答案 5 :(得分:0)

将CorePlot项目上的编译器从Apple LLVM编译器4.1切换到LLVM GCC 4.2

答案 6 :(得分:0)

我只是编译了核心图库并按照此链接http://code.google.com/p/core-plot/wiki/UsingCorePlotInApplications进行了从属项目安装 每一件事都像魅力一样(我的项目现在支持armv7和armv7s没有任何问题),此外我仍然将Build Active Architecture Only设置为NO,以确保支持所有架构

答案 7 :(得分:0)

您只需要从有效架构列表中删除armv7s。

只做以下事情。 - 从Project Navigator中选择您的项目 - 从目标列表中选择目标 - 选择构建设置选项卡 - 找到“有效架构”设置。应该说armv7 armv7s。 删除armv7s,您的有效架构中只有armv7。 现在你的项目将正确编译。

答案 8 :(得分:0)

使用Xcode 5时修复Core Plot的链接器错误

我多年来一直在使用Core Plot,并且得到了一堆关于armv7s的“Apple Mach-O链接器警告”错误,这些错误不支持更新的“CorePlotHeader”文件夹中的某些文件(目前在我的项目中删除了文件夹,将新文件夹拖到我的项目中)以反映CorePlot_1.4的更改。我还删除了旧的“libCorePlot-CocoaTouch.a”库并将其带入我的Frameworks文件夹。一切都在模拟器中运行良好,但我无法使用iOS 7.0.2在iPad 4上构建。

这是我在调试时发现的唯一可行的方法(在存档时似乎有效):

1)执行上面提到的所有操作,将Build Active Architectures设置为No,然后清理

2)您可能会收到有关架构“arm64”不受支持的错误,因此请从构建设置中的“有效架构”部分删除“arm64”

3)在调试时右键单击Products文件夹中的“MyApp.app”文件,您可能会看到旧的“libCorePlot-CocoaTouch.a”(如果修改日期是9/28/13之前的版本)你的应用。

4)删除该库并将新库复制到build文件夹中,清理然后重建

这适用于“静态库安装”方法,尚未使用“从属项目安装”方法进行测试

答案 9 :(得分:0)

我在Xcode 4.4中使用适用于iOS 6.1的Core Plot 1.0静态库。在使用iOS 7.0更新到Xcode 4.5后,我遇到了与您相同的问题。

为了解决这个问题,我在项目中删除了CorePlotHeaders文件夹和libCorePlot-CocoaTouch.a。如果您在Xcode中删除它,请选择“移至废纸篓”选项。

然后我从https://code.google.com/p/core-plot/downloads/list下载CorePlot_1.4.zip,然后从https://code.google.com/p/core-plot/wiki/UsingCorePlotInApplications跟踪静态库安装

希望有所帮助