在为ARM64构build时,架构x86_64的未定义符号

我build立了cryptopp库以用于一个ios应用程序。 但不工作,只告诉我

“架构x86_64的未定义符号:
“CryptoPP :: ProxyFilter :: IsolatedFlush(bool,bool)”,引用自:“

并在…上…

我遵循Crypopp维基页面的指导原则,但仍然崩溃。

我该如何解决这个问题?

ld:warning:忽略文件[path] /libcryptopp.a,缺less文件[path] /libcryptopp.a(4个片段)中所需的体系结构x86_64 CryptoPP :: ProxyFilter :: IsolatedFlush(bool,bool)“,引用自:.. ……(118件事)


我试图用github的prebuilt cryptopp来构build,但它也不起作用。 它发生如下错误:

架构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&,unsigned long long&,unsigned long long,std :: string const&,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&,unsigned long long&,std :: string const&,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&,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&,unsigned long&)”,引用来自:

  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&,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&,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&)”,引用自:

  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&)”,引用自:

  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 clangfind符号:错误:linker命令失败,退出代码1(使用-v查看调用)

MYCLASSAAA和MYCLASSBBB都是使用cryptopp lib的类。

我将尝试自己构build库,但是我认为也可能发生相同的错误。 我想要做什么?

和项目设置 – 我没有改变“编译源代码”Objective-C ++在“苹果LLVM 6.0 – 语言”,我刚刚设置为“根据文件types”。 它必须是客观的C ++? 当我改变的时候,在另一个来源发生太多的错误。 因为它是cocos2d-x(0.12.0 / c ++项目)的传统项目…

我希望你的帮助。 谢谢。

我该如何解决这个问题?

简短的回答:跑. ./setenv-ios.sh x86_64 . ./setenv-ios.sh x86_64下载脚本的新副本后。 默认情况下, setenv-ios.sh使用i386作为模拟器,它不支持x86_64。 该脚本现在响应x86_64,所以获取一个新的副本。

基于@ rmaddy的答案在Xcode 6模拟器使用x86_64? ,在某些情况下,Xcode 6 / iOS 8 SDK使用x86_64作为模拟器。

上传setenv-ios.sh的新版本。 它会回应. ./setenv-ios.sh x86_64 . ./setenv-ios.sh x86_64 ,通过使用iPhoneSimulator.platform -arch x86_64作为编译器选项来selectiPhoneSimulator.platform SDK。

在iOS的Crpyto ++ wiki页面(命令行)中添加了一个新的部分。 请参阅模拟器,ARM64和x86_64一节

我解决了这个问题 – 简而言之,构buildlibcryptopp时,必须使用-stdlib = libstdc ++标志(在GNUMAKEFILE中将其标记为CXXFLAGS)。

因为我的项目是传统的cocos2d-x项目,所以标准库设置为libstdc ++。

更多信息在这里 。 杰夫瑞非常详细地回答了我这个问题。