我正在尝试在我的iOS项目中导入并使用OpenSSL FIPS验证的对象模块。当我构建项目时,我收到此错误说:
Undefined symbols for architecture armv7:
"std::string::clear()", referenced from:
+[CryptoUtilities getSeed:::] in CryptoUtilities.o
+[CryptoUtilities getKey:::] in CryptoUtilities.o
"___cxa_pure_virtual", referenced from:
vtable for WBXML::CWBXMLParser in CWBXMLParser.o
"std::string::substr(unsigned long, unsigned long) const", referenced from:
WBXML::CWBXMLParser::LoadWBXMLHeader(std::string const&, unsigned long, unsigned long&) in CWBXMLParser.o
WBXML::CWBXMLParser::LoadTagContents(WBXML::CTag*, std::string const&, unsigned long, unsigned long&, unsigned short&, bool&) in CWBXMLParser.o
+[CryptoUtilities getKey:::] in CryptoUtilities.o
"operator delete(void*)", referenced from:
__gnu_cxx::new_allocator<WBXML::CTag>::deallocate(WBXML::CTag*, unsigned long) in CTag.o
__gnu_cxx::new_allocator<int>::deallocate(int*, unsigned long) in CryptoUtilities.o
// This goes for some more functions and then
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我知道here已经提出并回答了这个问题。我尝试了所有提到的解决方案,但我无法解决这个问题。
以下是我尝试解决问题的方法/设置。
我在链接的框架和库部分添加了libs和canister。
由于它是一个lib,我没有要添加的任何.m文件。
我尝试将C ++编译器更改为Compiler Default,LLVM,GNU,但没有一个工作。
我尝试在其他链接器标志中添加-ObjC。
我在包含头文件时尝试了extern C.头文件&#39;定义也正确使用了extern C.
更新:
我确实正确设置了编译器设置,如下所述。
此外,如果这有助于解决此错误。在运行脚本阶段运行此脚本时,我会收到提到的这些错误。
https://docs.google.com/document/d/1YEebn2p8HKhc7lxUWa3xMHXWt1cELXLm3AoKElbEyuU/edit?usp=sharing
请帮帮我。
更新2:
输出xcrun -sdk iphoneos lipo -info CryptoUtilities.o是
非胖文件:CryptoUtilities.o是架构:armv7
有关错误的更多详细信息: https://docs.google.com/document/d/1CqSa_tAsQP1JY_IxvXLDyYyQUI0iebV_REiCquwDXyk/edit?usp=sharing
请帮忙。我在这个职位上待了大约一个月。
答案 0 :(得分:0)
"std::string::clear()", referenced from:
+[CryptoUtilities getSeed:::] in CryptoUtilities.o
+[CryptoUtilities getKey:::] in CryptoUtilities.o
"___cxa_pure_virtual", referenced from:
vtable for WBXML::CWBXMLParser in CWBXMLParser.o
"std::string::substr(unsigned long, unsigned long) const", referenced from:
WBXML::CWBXMLParser::LoadWBXMLHeader(std::string const&, unsigned long, unsigned long&) in CWBXMLParser.o
WBXML::CWBXMLParser::LoadTagContents(WBXML::CTag*, std::string const&, unsigned long, unsigned long&, unsigned short&, bool&) in CWBXMLParser.o
+[CryptoUtilities getKey:::] in CryptoUtilities.o
"operator delete(void*)", referenced from:
__gnu_cxx::new_allocator<WBXML::CTag>::deallocate(WBXML::CTag*, unsigned long) in CTag.o
__gnu_cxx::new_allocator<int>::deallocate(int*, unsigned long) in CryptoUtilities.o
这与OpenSSL FIPS对象模块无关。
___cxa_pure_virtual
和朋友是C ++运行时的一部分。看起来你正在混合和匹配libc++
(由Xcode使用)和libstdc++
(由GNU提供)。
由于Xcode,你应该使用libc++
作为一切。这意味着您确保所有命令行都有-stdlib=libc++
。
如果您无法在任何地方使用libc++
,那么您需要在任何地方使用libstdc++
。 Xcode设置如下所示 C ++标准库 :
上图是使用libstdc++
(GNU库,而不是Xcode默认值)的Crypto ++。虽然它适用于Crypto ++问题,但它也适用于此。