我将cryptopp lib构建为用于ios应用程序。但是没有用,只告诉我
“架构x86_64的未定义符号:
“CryptoPP :: ProxyFilter :: IsolatedFlush(bool,bool)”,引自:“
等等...
我遵循Crypopp wiki页面的指南,但它仍然崩溃。
我该如何解决?
ld:警告:忽略文件[path] /libcryptopp.a,缺少必需的 文件[path] /libcryptopp.a中的架构x86_64(4 slice)CryptoPP :: ProxyFilter :: IsolatedFlush(bool,bool)“,引用 来自:...... ......(118件事)
我尝试使用github's prebuilt cryptopp构建,但它也不起作用。它会发生如下错误:
架构arm64的未定义符号: “CryptoPP :: BufferedTransformation :: ChannelFlush(std :: string const&,bool,int,bool)”,引自:
vtable for CryptoPP::SimpleProxyFilter in MYCLASSBBB.o vtable for CryptoPP::Bufferless<CryptoPP::Filter> in MYCLASSBBB.o
“CryptoPP :: Filter :: CopyRangeTo2(CryptoPP :: BufferedTransformation&amp ;, unsigned long long&amp ;, unsigned long long,std :: string const&amp; bool)const”,引自:
vtable for CryptoPP::Base64Decoder in MYCLASSBBB.o vtable for CryptoPP::Unflushable<CryptoPP::Filter> in MYCLASSBBB.o vtable for CryptoPP::SimpleProxyFilter in MYCLASSBBB.o vtable for CryptoPP::Bufferless<CryptoPP::Filter> in MYCLASSBBB.o
“CryptoPP :: Filter :: TransferTo2(CryptoPP :: BufferedTransformation&amp ;, unsigned long long&amp;,std :: string const&amp;,bool)”,引自:
vtable for CryptoPP::Base64Decoder in MYCLASSBBB.o vtable for CryptoPP::Unflushable<CryptoPP::Filter> in MYCLASSBBB.o vtable for CryptoPP::SimpleProxyFilter in MYCLASSBBB.o vtable for CryptoPP::Bufferless<CryptoPP::Filter> in MYCLASSBBB.o
“CryptoPP :: BufferedTransformation :: ChannelPut2(std :: string const&amp ;, unsigned char const *,unsigned long,int,bool)”,引自:
vtable for CryptoPP::Base64Decoder in MYCLASSBBB.o vtable for CryptoPP::Unflushable<CryptoPP::Filter> in MYCLASSBBB.o vtable for CryptoPP::SimpleProxyFilter in MYCLASSBBB.o vtable for CryptoPP::Bufferless<CryptoPP::Filter> in MYCLASSBBB.o
“CryptoPP :: BufferedTransformation :: ChannelCreatePutSpace(std :: string const&amp;,unsigned long&amp;)”,引自:
vtable for CryptoPP::Base64Decoder in MYCLASSBBB.o vtable for CryptoPP::Unflushable<CryptoPP::Filter> in MYCLASSBBB.o vtable for CryptoPP::SimpleProxyFilter in MYCLASSBBB.o vtable for CryptoPP::Bufferless<CryptoPP::Filter> in MYCLASSBBB.o
“CryptoPP :: BufferedTransformation :: ChannelPutModifiable2(std :: string const&amp ;, unsigned char *,unsigned long,int,bool)”,引自:
vtable for CryptoPP::Base64Decoder in MYCLASSBBB.o vtable for CryptoPP::Unflushable<CryptoPP::Filter> in MYCLASSBBB.o vtable for CryptoPP::SimpleProxyFilter in MYCLASSBBB.o vtable for CryptoPP::Bufferless<CryptoPP::Filter> in MYCLASSBBB.o
“CryptoPP :: BufferedTransformation :: ChannelMessageSeriesEnd(std :: string const&amp;,int,bool)”,引自:
vtable for CryptoPP::Base64Decoder in MYCLASSBBB.o vtable for CryptoPP::Unflushable<CryptoPP::Filter> in MYCLASSBBB.o vtable for CryptoPP::SimpleProxyFilter in MYCLASSBBB.o vtable for CryptoPP::Bufferless<CryptoPP::Filter> in MYCLASSBBB.o
“CryptoPP :: BufferedTransformation :: SetRetrievalChannel(std :: string const&amp;)”,引自:
vtable for CryptoPP::Base64Decoder in MYCLASSBBB.o vtable for CryptoPP::Unflushable<CryptoPP::Filter> in MYCLASSBBB.o vtable for CryptoPP::SimpleProxyFilter in MYCLASSBBB.o vtable for CryptoPP::Bufferless<CryptoPP::Filter> in MYCLASSBBB.o
“CryptoPP :: StringSinkTemplate :: StringSinkTemplate(std :: string&amp;)”,引自:
encryptString(std::string const&) in MYCLASSBBB.o decryptString(std::string const&, int) in MYCLASSBBB.o MYCLASSAAA::setDeviceId() in MYCLASSAAA.o MYCLASSAAA::getSignature() in MYCLASSAAA.o
ld:找不到架构arm64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
MYCLASSAAA和MYCLASSBBB都是使用cryptopp lib的所有课程。
我会尝试自己构建lib,但我认为可能会发生同样的错误。我想做什么?
和项目设置 - 我没有在“Apple LLVM 6.0 - 语言”中将“Compile Sources As”更改为Objective-C ++,我只是将其设置为“根据文件类型”。它必须是客观的c ++?当我改变它时,它在另一个来源中出现太多错误。因为它是cocos2d-x(0.12.0 / c ++项目)的遗留项目......
我希望你的帮助。感谢。
答案 0 :(得分:0)
我该如何解决?
简短回答:下载脚本的新副本后运行. ./setenv-ios.sh x86_64
。默认情况下,setenv-ios.sh
使用i386作为模拟器,它不支持x86_64。该脚本现在响应x86_64,因此获取新副本。
基于@ rmaddy在Does Xcode 6 Simulator use x86_64?的回答,在某些情况下,Xcode 6 / iOS 8 SDK似乎使用x86_64作为模拟器。
上传了新版setenv-ios.sh
。它将使用. ./setenv-ios.sh x86_64
SDK作为编译器选项来回复iPhoneSimulator.platform
。
在{* 3}}的Crpyto ++ wiki页面上添加了一个新的部分。请参阅模拟器,ARM64和x86_64 部分。
答案 1 :(得分:0)
我解决了这个问题 - 简而言之,在构建libcryptopp时,必须使用-stdlib = libstdc ++标志(在GNUMAKEFILE中为CXXFLAGS)构建。
因为我的项目是遗留的cocos2d-x项目,所以标准库被设置为libstdc ++。
更多信息是here。杰弗里非常详细地回答了我。