我已经构建了一个32位库,这是我项目的要求。这是它的口号信息:
LP:lib hcabral$ lipo -info Release-iphoneos/librmservices_iphone.a
input file Release-iphoneos/librmservices_iphone.a is not a fat file
Non-fat file: Release-iphoneos/librmservices_iphone.a is architecture: armv7
我在我的项目中链接了库,它显示在"链接二进制文件和二进制文件"等等,但是我收到了这个错误:
Undefined symbols for architecture armv7:
"std::_List_node_base::hook(std::_List_node_base*)", referenced from:
xpath::YaccParser::getObjectPointer(uft::Value*&, bool) in librmservices_iphone.a(xpath_yacc.o)
xpath::YaccParser::performLexicalAnalysis(uft::Value*&) in librmservices_iphone.a(xpath_yacc.o)
"std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from:
xpath::Context::removeDynamicContext(uft::Value const&) in librmservices_iphone.a(xpath_context.o)
"_kCFProxyPasswordKey", referenced from:
DLProxySettingsController::getSystemProxySettings() in librmservices_iphone.a(DLProxySettingsController.o)
"_kCFNetworkProxiesHTTPProxy", referenced from:
(...)
我限制在armv7的所有项目都没有解决方案。有什么想法吗?
答案 0 :(得分:0)
所以,我有一个纯粹的Objective-C项目A,但它取决于项目B,即C / C ++和Objective-C,恰好只是32位代码。
直到Mavericks和Xcode 5.1.1,我为所有平台(iOS和i386的发布和调试)构建了Project B,以便调试,运行测试并最终部署。项目B有自己的一组链接器标志和选项,使它非常特殊。
在项目A中,我将链接项目B的二进制文件(libProjectB.a),它一直有效。
然而,在最后一次迭代中,Project A构建过程抱怨armv7缺少符号,这使我感到困惑,因为项目B仅在armv7和i386中编译。
我设法删除30多个链接错误的唯一方法是链接以下框架:
libstdc++.6.0.9.dylib
CoreText.framework
CFNetwork.framework
Foundation.framework
我希望这些看起来不像是随机框架,但我发现基于链接错误的类型逐个添加。例如,我在打开C ++代码之后添加了 CFNetwork ,并注意到符号将成为其中的一部分。
无论如何,再一次,我不知道它为什么会发生,但它发生在Yosemite和Xcode 6.1上。希望这可以揭示某人。