我有一个动态框架,它链接到谷歌地图(据我所知,它仍然是一种静态库,如果不是这样,只需使用框架包装器。)
问题是该框架链接到静态库并且似乎也直接包含其代码,因为我不需要在使用该框架的应用程序中链接或嵌入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工作。但问题仍然存在,显然它仍然包含在框架中。
答案 0 :(得分:1)
不要做数据
最佳做法是将所有与Google地图相关的代码放在单独的库中,该库可链接到您的库和Google Maps静态库。
(信用:Robert Napier对How to compile static library that includes optional classes that depend on a third party library
的回答