我有静态库(我们称之为S),它使用类别(来自MGTwitterEngine的NSData + Base64)和 C库 (由ZipArchive包装的MiniZip, mm 文件)。
此静态库用于 iPhone 3.x项目(我们称之为A)。为了能够使用MiniZip库,我在项目A中包含了它的文件以及静态库S.如果不是,我会收到编译错误。
项目A在模拟器上正常工作。当我在设备上运行它时,使用类别时会出现无法识别的选择器错误。
正如这里所指出的,似乎有一个链接器错误会影响iPhone 3.x(Categories in static library for iPhone device 3.0)中的类别。解决方法是将-all_load添加到引用静态库的项目的Other Linker Flags。
但是,如果我这样做,那么我会得到重复的符号错误,因为我在项目A中包含了MiniZip库。
解决方法是在项目A中也包含类别文件。如果我这样做,项目A在设备中运行良好,但由于重复的符号错误而无法在模拟器上构建。
如何设置项目A以使其在模拟器和具有相同配置的设备上运行?
答案 0 :(得分:2)
您可以尝试使用-ObjC而不是-all_load,这样可以使链接器在不加载所有符号的情况下识别Objective-C类别(在某些情况下,这适用于我,而在其他情况下则不适用)。
另一种解决方法是不将MiniZip库包含到项目中(A),而只包括头文件(这是正确编译项目所需的唯一文件)。然后,链接器将使用链接到静态库的MiniZip库。