Xcode - 获取force_load以使用相对路径

时间:2011-01-24 21:18:50

标签: iphone xcode ios linker static-libraries

某些库在链接到Xcode项目时需要-all_load链接器标志。但是,如果库之间存在符号冲突,则会导致链接器错误。解决方案是使用-force_load,它可以有效地让你在某些库上使用-all_load,但不能在其他库上使用。

然而,这反过来会导致一个新问题,至少对我而言。每当我使用-force_load和库的 relative 路径时,链接器总会在库和它自身之间发现符号冲突。看来链接器认为具有绝对路径的库和具有相对路径的库是不同的库,因此在库和它自身之间发现冲突。

我可以通过使用带有标志的绝对路径来避免这种情况。但这不是一个很好的解决方案,因为在我的文档目录中保存库的源代码很方便。但是文档目录的路径在其他机器上会有所不同。

问题:任何人都可以使用force_load来使用库的 relative 路径吗?

编辑:有关背景信息,请参阅this question

2 个答案:

答案 0 :(得分:36)

使用Xcode 4,如果您将库项目包含到您的应用程序项目中,那么您可以将其添加到其他链接器标志:

-force_load $(BUILT_PRODUCTS_DIR)/<library_name.a>

您仍然需要依赖项,您还需要在框架和库的链接阶段列表中添加库。

编辑:Apple现在说,从某些Xcode 4版本开始,你可以简单地使用这个链接器标志:“-ObjC”来获取正确加载类别的库。那个标志在Xcode 5中对我来说很好。人们还在投票给这个答案,但我怀疑-ObjC标志现在是最好的解决方案。

答案 1 :(得分:8)

这对我有用。与上述答案一样,您仍需要将该库包含在项目中。

-force_load $(SRCROOT)/pathToLibraryFromProject/libname.a

对于路径,它只是项目中的文件夹,它们指向您放置库的位置,例如BaseFoler / Subfolder / libName.a。