Xcode – 获取force_load使用相对path

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

但是,这反过来会导致一个新的问题,至less对我而言。 每当我使用-force_load和一个库的相对path时,链接器总是发现库和它本身之间的符号冲突。 看来链接器认为图书馆的绝对path和图书馆的相对path是不同的图书馆,因此发现图书馆与自身之间存在冲突。

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

问:任何人都可以得到force_load与库的相对path?

编辑:对于背景信息,看到这个问题

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

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

您仍然需要依赖关系,并且您还需要在“链接阶段”框架和库列表中添加库。

编辑:苹果现在说,作为一些Xcode 4发布,你可以简单地使用这个链接器标志:“-ObjC”来获得正确加载类别的库。 在Xcode 5中,这个标志对我来说工作得很好。人们仍然对这个答案投票,但是我怀疑-ObjC标志现在是最好的解决scheme。

这对我有效。 像上面的答案,你仍然需要在项目中包括图书馆。

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

对于path,只是项目中的文件夹导致您放置库的位置,例如BaseFoler / Subfolder / libName.a。