整合时出现链接错误 SKMaps.Framework
Linking Errors while integrating SKMaps.Framework
尝试集成 SKMaps
框架时出现这些错误
Undefined symbols for architecture x86_64:
"CRouteTestManager::calculateRoute(NGRouteInput const&, std::__1::shared_ptr<CRoute>&)", referenced from:
PoiTrackerTest::createRoute() in SKMaps(PoiTrackerTest.o)
"_gpTestRoutesManager", referenced from:
PoiTrackerTest::createRoute() in SKMaps(PoiTrackerTest.o)
createNavigationObject(int) in SKMaps(NavigationTest.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
请帮我解决这个错误。
Environment :
Xcode 6.3.1, Mac OSX 10.10.3
Deployment Target iOS7.0
支持Swift。
我遵循了这个指南:http://developer.skobbler.com/getting-started/ios
并且还添加了 CoreMotion.framework,因为还存在与该框架相关的链接错误。
链接器错误的原因
这似乎是 linker 标记 -all_load
的结果,它可能已通过 CocoaPod 添加到您的项目中。在极少数情况下,您有一个只定义类别的静态库,那么您需要此标志。否则,它可以安全地从您的构建中删除。请参阅此处的讨论:
What does the -all_load linker flag do?
从该讨论的评论部分的 link 中,您可以看到之前需要 -all_load
的错误已在 XCode 4.
后得到修复
Objective-C categories in static library
可能的解释
这个框架内部定义了一堆测试,但是它们的依赖没有包含在框架中。当 linker 被迫解析和 link 所有依赖项时,它会出错,因为它找不到它们。基本上,应该清理库,使其不包含这些不必要的符号。解决方法是暂时删除 -all_load
。
面临同样的问题。删除 -all_load
标志没有帮助,所以我继续研究并找到了解决方案:
尽管 Skobbler 声明需要 linking libc++
库,但实际上您需要 link libstdc++.6
库。请注意 linking libstdc++
将无济于事。
P.S。 Xcode6.4,iOSSDK 8.4
尝试集成 SKMaps
框架时出现这些错误
Undefined symbols for architecture x86_64:
"CRouteTestManager::calculateRoute(NGRouteInput const&, std::__1::shared_ptr<CRoute>&)", referenced from:
PoiTrackerTest::createRoute() in SKMaps(PoiTrackerTest.o)
"_gpTestRoutesManager", referenced from:
PoiTrackerTest::createRoute() in SKMaps(PoiTrackerTest.o)
createNavigationObject(int) in SKMaps(NavigationTest.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
请帮我解决这个错误。
Environment :
Xcode 6.3.1, Mac OSX 10.10.3
Deployment Target iOS7.0
支持Swift。
我遵循了这个指南:http://developer.skobbler.com/getting-started/ios
并且还添加了 CoreMotion.framework,因为还存在与该框架相关的链接错误。
链接器错误的原因
这似乎是 linker 标记 -all_load
的结果,它可能已通过 CocoaPod 添加到您的项目中。在极少数情况下,您有一个只定义类别的静态库,那么您需要此标志。否则,它可以安全地从您的构建中删除。请参阅此处的讨论:
What does the -all_load linker flag do?
从该讨论的评论部分的 link 中,您可以看到之前需要 -all_load
的错误已在 XCode 4.
Objective-C categories in static library
可能的解释
这个框架内部定义了一堆测试,但是它们的依赖没有包含在框架中。当 linker 被迫解析和 link 所有依赖项时,它会出错,因为它找不到它们。基本上,应该清理库,使其不包含这些不必要的符号。解决方法是暂时删除 -all_load
。
面临同样的问题。删除 -all_load
标志没有帮助,所以我继续研究并找到了解决方案:
尽管 Skobbler 声明需要 linking libc++
库,但实际上您需要 link libstdc++.6
库。请注意 linking libstdc++
将无济于事。
P.S。 Xcode6.4,iOSSDK 8.4