尝试在XCode 4.2中构建存档时,我收到了“重复符号”错误.我通过删除七个单独的-force_load标志解决了这个问题,这些标志引用了我有依赖关系的三个库中的每个库.
我的项目现在成功构建.
我想知道是否有人可以解释为什么这个改变有效?是否存在XCode 4.2修复的错误,或者是行为改变? This post suggests XCode 3.2中有一个错误,但是如果有人可以为我提供关于这个主题的更多信息,那将是很好的,所以我可以确定我没有通过删除这些-force_load标记可能做错了.
谢谢!
解决方法
但是,在iPhone OS 2.0和3.0之间,这已停止正常工作.正如我在this answer中提到的,我们在Core Plot框架中遇到了这个问题,发现我们需要添加-all_load链接器标志以使框架正常工作. Apple自己发布了Technical Q&A QA1490,提到了这个问题:
For 64-bit and iPhone OS applications,there is a linker bug that
prevents -ObjC from loading objects files from static libraries that
contain only categories and no classes. The workaround is to use the
-all_load or -force_load flags.-all_load forces the linker to load all object files from every archive it sees,even those without Objective-C code. -force_load is
available in Xcode 3.2 and later. It allows finer grain control of
archive loading. Each -force_load option must be followed by a path to
an archive,and every object file in that archive will be loaded.
不幸的是,这样做的副作用是从多个库链接的重复符号可能会导致您遇到的错误.
我提交了一份关于此的错误报告(早在2009年),看来现在在Xcode中使用的最新版本的LLVM不再受此链接器错误的影响.我尝试使用-ObjC与Core Plot iOS静态库目标,它现在工作正常.这是个好消息.