某些库在链接到 Xcode 项目时需要 -all_load 链接器标志。但是,如果库之间存在符号冲突,这会导致链接器错误。解决方案是使用 -force_load,它可以有效地让您在某些库上使用 -all_load,但不能在其他库上使用。
然而,这反过来又导致了一个新问题,至少对我来说是这样。每当我将 -force_load 与库的相对路径一起使用时,链接器总是会发现库与其自身之间的符号冲突。看来链接器认为具有绝对路径的库和具有相对路径的库是不同的库,因此发现库与自身之间存在冲突。
我可以通过使用带有标志的绝对路径来避免这种情况。但这不是一个很好的解决方案,因为将库的源代码保存在我的文档目录中很方便。但文档目录的路径在其他机器上会有所不同。
问题:任何人都可以让force_load 使用库的相对路径吗?
编辑:有关背景信息,请参阅这个问题 https://stackoverflow.com/questions/3354864/xcode-project-target-settings-syntax-for-linker-flag-force-load-on-iphone
使用 Xcode 4,如果您将库项目包含到应用程序项目中,则可以将其添加到其他链接器标志中:
-force_load $(BUILT_PRODUCTS_DIR)/<library_name.a>
您仍然需要依赖项,并且还需要将库添加到框架和库的链接阶段列表中。
编辑:Apple 现在表示,从某些 Xcode 4 版本开始,您可以简单地使用此链接器标志:“-ObjC”来获取具有正确加载类别的库。该标志在 Xcode 5 中对我来说工作得很好。人们仍在投票这个答案,但我怀疑 -ObjC 标志是现在最好的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)