28

我需要帮助。我有一个使用stdc++的框架,比如std:string。现在,当我为 IOS7 创建新应用程序时,由于 stdc++ lib 的问题,链接此框架存在问题:

架构 armv7 “std::basic_string, std::allocator >::_Rep::_S_empty_rep_storage”的未定义符号,引用自 ...

我发现了一些奇怪的事情,当我在这个应用程序中将部署目标更改为 ios6 时,一切正常。使用 ios7 我看到错误。

我已经在其他链接器标志中设置了标志:-lstdc++

知道 ami 做错了什么吗?

4

4 回答 4

69

老实说,我不喜欢上面的答案,因为它使用的是静态库而不是动态库!

我自己也遇到过问题,发现问题是 xcode 无法在您的项目中找到任何 C++ 文件,因此假定不需要 libstc++!

当您链接到使用它的静态库时非常烦人!

解决方案 :

  • 向您的项目添加一个空的 .mm 文件!
  • 确保在 Build Settings 中将C++ Standard Library 设置为libstdc++(GNU c++ 标准库)

这对我有用,我不必将 -lstdc++ 添加到 Other Linker Flags

希望能帮助其他有同样问题的人。

于 2013-10-08T14:16:17.360 回答
27

只是这个答案的更新:

这一步非常重要!

确保在 Apple LLVM 5.0 编译器构建设置中将C++ 标准库设置为libstdc++(GNU c++ 标准库)

背景:

我有一个 iOS 应用程序突然停止为 iOS 7 构建标准库链接错误。我一直在模拟器和 iPad mini 上成功测试应用程序,并将其存档,但是当我添加 iPhone 5S 进行测试时,我开始收到链接错误(可能是因为混合了新架构?)。

在 Google 上搜索链接错误,我找到了将 libstdc++.dylib 显式添加到链接库的建议。这没有用。

我通过将 libstdc++.6.dylib 添加到链接库来进行实验;这消除了链接错误,但应用程序很早就在标准 C++ 库代码中崩溃了。

如上所述,删除库的显式添加并更改构建设置中的编译器设置,更正了链接错误和运行时问题。

感谢 rimestad 的指针!

于 2014-01-18T15:35:18.667 回答
27

谢谢你的帮助。我找到了解决方案。我在其他链接器标志中使用了 -lstdc++ 标志,但现在还不够。我不得不在 BuildPhases->Link Binary With Libraries 中添加“libstdc++.6.0.9.dylib。网络信息中有某处 xcode 在 ios7 stdc++ lib 选择方面存在问题,应该手动选择它。

问候, 马雷克

于 2013-09-24T14:50:31.790 回答
3

我有一个类似的问题,但@MarekM 的回答只解决了我的部分问题,所以我尝试添加 libstdc++.dylib 和 libstdc++.6.dylib,这使得所有编译错误都消失了。

于 2014-10-08T18:35:35.680 回答