1

我开发了一个企业 iOS 平台,它使用AllJoyn在各种平板电脑之间进行通信。该应用程序已经相当稳定了几个月,但由于 Apple 停止支持 iOS<7,我们正在将该平台转移到 iOS7。更新项目并消除所有编译器警告后,我不断收到以下链接器错误:

Undefined symbols for architecture armv7:
"std::string::append(char const*, unsigned long)", referenced from:
std::basic_string<char, std::char_traits<char>, 
std::allocator<char> > std::operator+<char, std::char_traits<char>, 
std::allocator<char> >(char const*, std::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) in libajdaemon.a(json_writer.o)

在搜索 AllSeen 支持网站后,我发现这篇文章似乎很相关。我尝试摆弄架构(删除和添加 armv7、armv7s 和 i386),我检查了 AllJoyn SDK 的位置是否正确,但这绝对不是路径或 AllJoyn 库问题。

然后我尝试在 Stack Overflow 上追踪潜在的解决方案并找到这个线程。手动添加 libstdc++.dylib 但添加 libstdc++6.0.9.dylib 使我的项目成功编译。然而,这给应用程序的运行时版本带来了问题。

解决方案:

我终于遇到了这个线程,描述了与自动检测适当的 C++ 库以在 XCode 中链接相关的问题。在实施@rimestad 的解决方案后,我终于让整个项目得以运行

确保在构建设置中将 C++ 标准库设置为 libstdc++(GNU c++ 标准库)

最后查询:

我还有一个困扰我的小问题...为什么 iOS6 构建(在 XCode 5.1 中)正确检测到我的项目需要 GNU C++ 标准库,而为 iOS7 构建的 IDE 设置完全相同(使用完全相同的代码) 未能检测到这一点?

4

0 回答 0