在动态(Cocoa Touch)框架内链接静态库

时间:2015-11-09 20:36:52

标签: ios objective-c xcode cocoa-touch google-maps-sdk-ios

我有一个动态框架,它链接到谷歌地图(据我所知,它仍然是一种静态库,如果不是这样,只需使用框架包装器。)

问题是该框架链接到静态库并且似乎也直接包含其代码,因为我不需要在使用该框架的应用程序中链接或嵌入Google Maps,一切正常。 除非我在应用内部使用Google地图。

我得到"架构XY的未定义符号"在编译阶段,或者我链接谷歌地图,然后在应用程序启动期间在调试控制台中收到警告墙,如:

  

GMSPolyline2D类在两者中实现   /.../Build/Products/Debug-iphonesimulator/MyFramework.framework/MyFramework   和   /..../Bundle/Application/7C73324B-4A42-4063-98AA-879345997DE6/MyApp.app/MyApp。   将使用两者之一。哪一个未定义。

有没有办法只在框架中链接谷歌地图,但不包括框架产品中的符号?它适用于动态框架,但静态库似乎只是包含在内。我已尝试使用-weak_framework-weak_library进行弱链接,但似乎无效。

实际上,我无法让Xcode在其框架目录中找到-weak_library的GoogleMaps二进制文件,即使在.framework文件夹中直接链接为图书馆搜索路径。

由于我是我框架的唯一用户,因此我可以强制执行使用框架DOES的每个应用程序都包含Google Maps框架。到目前为止,除了警告之外,应用程序工作正常(到目前为止,在运行时使用哪两个类无关紧要,因为两者都应该相同)。但是,如果有更好的解决方案,我会睡得更好:)

编辑:我可以通过直接在linker-flag部分中移交绝对路径而不是使用 Library Search Path 设置来使-weak_library工作。但问题仍然存在,显然它仍然包含在框架中。

1 个答案:

答案 0 :(得分:1)

不要做数据

最佳做法是将所有与Google地图相关的代码放在单独的库中,该库可链接到您的库和Google Maps静态库。

(信用:Robert Napier对How to compile static library that includes optional classes that depend on a third party library

的回答