Oss*_*sir 4 libstdc++ ios libc++ google-maps-sdk-ios
在我们的项目中,我们使用在其实现中非常紧密地使用libc ++的库.当我们添加Google Maps SDK时,我们遇到了链接错误:
Undefined symbols for architecture i386:
"std::string::_Rep::_M_destroy(std::allocator<char> const&)", referenced from:
gmscore::utils::gmsutils::StringPrintf(char const*, ...) in GoogleMaps(GMSUtils.o)
_GMS_objc_lookUpClass in GoogleMaps(GMSRenames.o)
_GMS_objc_getClass in GoogleMaps(GMSRenames.o)
_GMS_objc_getProtocol in GoogleMaps(GMSRenames.o)
gmscore::vector::CameraPosition::StringValue() const in GoogleMaps(CameraPosition.o)
"std::string::_Rep::_S_empty_rep_storage", referenced from:
gmscore::utils::gmsutils::StringPrintf(char const*, ...) in GoogleMaps(GMSUtils.o)
_GMS_objc_lookUpClass in GoogleMaps(GMSRenames.o)
_GMS_objc_getClass in GoogleMaps(GMSRenames.o)
_GMS_objc_getProtocol in GoogleMaps(GMSRenames.o)
gmscore::vector::CameraPosition::StringValue() const in GoogleMaps(CameraPosition.o)
gmscore::utils::gmsutils::StringPrintf(char const*, ...) in GoogleMaps(GMSUtils.o)
_GMS_objc_lookUpClass in GoogleMaps(GMSRenames.o)
_GMS_objc_getClass in GoogleMaps(GMSRenames.o)
_GMS_objc_getProtocol in GoogleMaps(GMSRenames.o)
gmscore::vector::CameraPosition::StringValue() const in GoogleMaps(CameraPosition.o)
gmscore::utils::gmsutils::StringPrintf(char const*, ...) in GoogleMaps(GMSUtils.o)
_GMS_objc_lookUpClass in GoogleMaps(GMSRenames.o)
_GMS_objc_getClass in GoogleMaps(GMSRenames.o)
_GMS_objc_getProtocol in GoogleMaps(GMSRenames.o)
gmscore::vector::CameraPosition::StringValue() const in GoogleMaps(CameraPosition.o)
"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)", referenced from:
gmscore::utils::gmsutils::StringPrintf(char const*, ...) in GoogleMaps(GMSUtils.o)
gmscore::model::Point2D::StringValue() const in GoogleMaps(Point2D.o)
"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)", referenced from:
gmscore::utils::gmsutils::StringPrintf(char const*, ...) in GoogleMaps(GMSUtils.o)
gmscore::vector::CameraPosition::StringValue() const in GoogleMaps(CameraPosition.o)
Run Code Online (Sandbox Code Playgroud)
这是因为谷歌地图sdk使用libstdc ++库,但我们不能改变使用libc ++的代码.我们尝试封装在静态库(*.a)中使用libc ++的代码和库,但没有成功.什么机会让事情有效?也许,可以将Google Maps SDK与libc ++相关联?
您看到的未定义符号是与libstdc ++关联的符号.libstdc ++和libc ++在很大程度上是ABI不兼容的,即使它们(很大程度上)提供相同的API.
在已知ABI不兼容性的地方,例如std::string,libc ++使用不同的重整方案,这样libstdc ++和libc ++字符串在运行时不会意外混合(这会导致难以调试的运行时错误).
如果您看到std::__1其名称中包含的符号,那么这些符号与libc ++相关联,例如libc ++ std::__1::basic_string<...,其中libstdc ++具有std::basic_string<....
您可以使用这种修改知识来帮助您确定哪些库需要std :: lib的哪些实现.
提交您所做的功能请求是您可以做的最好的事情,并且感谢您这样做!:-)
| 归档时间: |
|
| 查看次数: |
887 次 |
| 最近记录: |