我开发了一个企业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支持网站后,我发现这个似乎相关的article。我试着摆弄架构(删除并添加armv7,armv7s和i386),我检查了AllJoyn SDK的位置是否正确,但它肯定不是路径或AllJoyn库问题。
然后我尝试在Stack Overflow上追踪潜在的解决方案并找到this thread。手动添加libstdc ++。dylib但添加libstdc ++ 6.0.9.dylib使我的项目成功编译。但是这会产生应用程序运行时版本的问题。
解决方案:
我终于遇到this thread,描述了与自动检测要在XCode中链接的相应C ++库相关的问题。在实施了@ rimestad的解决方案后,我终于通过
完成了整个项目确保在构建设置中将C ++标准库设置为libstdc ++(GNU c ++标准库)
上次查询:
我还有一个小问题让我烦恼...为什么iOS6版本(在XCode 5.1中)正确检测到我的项目需要GNU C ++标准库,而完全相同的IDE设置为iOS7构建(确切地说相同的代码)无法检测到这个?