我正在尝试使用 this tutorial 构建一个 iPhone 框架但是当我构建我的测试应用程序(将使用构建框架的应用程序)时,它出现了一个错误:
duplicate symbol _objc_unretainedPointer in:
...
8 duplicate symbols for architecture i386
在终端上,我对框架的二进制文件进行了 nm
调用,它具有正常可执行文件的符号,包括 _main
/_objc_unretainedPointer
/ETC。难怪会出现重复的错误:框架有自己的可执行符号,测试应用程序也是如此。
我的问题是,框架的正确 Mach-O 类型应该是什么,这样它就没有 _main
/etc 符号?以及应该如何将它添加到测试应用程序中?
而且...教程也有错误吗?
我尝试了什么:我将框架的 Mach-O 类型设置为动态库,它摆脱了 _main
/etc 符号,测试应用程序构建正常,但是当测试应用程序是在模拟器上运行,它有一个 dyld: Library not loaded
错误。
最佳答案
我解决了我的问题并使设置正常工作,但它没有回答标题问题。
问题是原题中的教程(教程A)出错了。它缺少我在另一个 tutorial 中找到的捆绑目标设置(教程 B)。
Link With Standard Libraries = No
在教程 A 中,它没有设置,所以它默认为是。在完成教程 B 并将其设置为否后,使用构建框架的测试应用程序成功编译并按预期运行。
回答标题问题:Mach-O 类型(至少对于本案例和教程 A 和 B)应该是可重定位目标文件。
关于ios - 自定义 iPhone 框架的 Mach-O 类型应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16058765/