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

Wil*_*sch 17 iphone xcode linker static-libraries ios

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

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

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

问题:任何人都可以使用force_load来处理库的相对路径吗?

编辑:有关背景信息,请参阅此问题

Dav*_*d H 36

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

-force_load $(BUILT_PRODUCTS_DIR)/<library_name.a>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 大卫,你的答案是正确的,我实际上赞成了它,但我在搜索如何摆脱-ObjC标志时发现了它,这打破了一些写得不好的代码,我无意改写. (2认同)

小智 8

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

-force_load $(SRCROOT)/pathToLibraryFromProject/libname.a
Run Code Online (Sandbox Code Playgroud)

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