- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我尝试使用 github's prebuilt cryptopp 构建但它也不起作用。它会发生如下错误:
Undefined symbols for architecture arm64: "CryptoPP::BufferedTransformation::ChannelFlush(std::string const&, bool, int, bool)", referenced from:
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", referenced from:
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)", referenced from:
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)", referenced from:
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&)", referenced from:
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)", referenced from:
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)", referenced from:
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&)", referenced from:
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&)", referenced from:
encryptString(std::string const&) in MYCLASSBBB.o
decryptString(std::string const&, int) in MYCLASSBBB.o
MYCLASSAAA::setDeviceId() in MYCLASSAAA.o
MYCLASSAAA::getSignature() in MYCLASSAAA.old: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
MYCLASSAAA 和 MYCLASSBBB 都是使用 cryptopp 库的类。它使用 cryptlib.h、modes.h、filters.h、aes.h、base64.h、md5.h、hex.h。
我什至尝试自己构建库,但我还是遇到了同样的错误。我该怎么办?
希望得到您的帮助。谢谢。
添加 xcode 命令
Ld /Users/USERNAME/Library/Developer/Xcode/DerivedData/PROJECT_NAME-aknkujyaqvqjswbhspmawywtyqee/Build/Products/Release-iphoneos/PROJECT_NAME.app/PROJECT_NAME normal arm64 cd /Users/USERNAME/Desktop/Development/Office_Projects/PROJECTROOT/root export IPHONEOS_DEPLOYMENT_TARGET=5.1.1 export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk -L/Users/USERNAME/Library/Developer/Xcode/DerivedData/PROJECT_NAME-aknkujyaqvqjswbhspmawywtyqee/Build/Products/Release-iphoneos -L/Users/USERNAME/Desktop/Development/Office_Projects/PROJECTROOT/root/PROJECT_NAME/libs/cocos2dx/platform/third_party/ios/libraries -L/Users/USERNAME/Desktop/Development/Office_Projects/PROJECTROOT/root/PROJECT_NAME/libs/EEAF-SDK7.0(i386,armv7,armv7s,arm64) -L/Users/USERNAME/Desktop/Development/Office_Projects/PROJECTROOT/root/PROJECT_NAME/libs/boost_1_57/ios -L/Users/USERNAME/Desktop/Development/Office_Projects/PROJECTROOT/root/PROJECT_NAME/Classes/cryptopp/lib -LPROJECT_NAME/cocos2dx/platform/third_party/ios/libraries -LPROJECT_NAME/EEAF-SDK7.0(i386,armv7,armv7s,arm64) -F/Users/USERNAME/Library/Developer/Xcode/DerivedData/PROJECT_NAME-aknkujyaqvqjswbhspmawywtyqee/Build/Products/Release-iphoneos -F/Users/USERNAME/Desktop/Development/Office_Projects/PROJECTROOT/root/PROJECT_NAME/libs -filelist /Users/USERNAME/Library/Developer/Xcode/DerivedData/PROJECT_NAME-aknkujyaqvqjswbhspmawywtyqee/Build/Intermediates/PROJECT_NAME.build/Release-iphoneos/PROJECT_NAME.build/Objects-normal/arm64/PROJECT_NAME.LinkFileList -dead_strip -lxml2 -lz -ObjC -lcryptopp -fobjc-link-runtime -miphoneos-version-min=5.1.1 -lc++ /Users/USERNAME/Desktop/Development/Office_Projects/PROJECTROOT/root/PROJECT_NAME/libs/boost_1_57/ios/boost.a -framework UIKit -framework CoreTelephony -lEEAF -framework FacebookSDK -framework AddressBook -framework AddressBookUI -framework AudioToolbox -framework AVFoundation -framework CFNetwork -framework CoreGraphics -framework CoreLocation -framework CoreMedia -framework CoreText -framework Foundation -framework ImageIO -framework MediaPlayer -framework MobileCoreServices -framework OpenAL -framework OpenGLES -framework QuartzCore -framework Security -framework SystemConfiguration -lsqlite3.0 -framework StoreKit -lcurl -Xlinker -dependency_info -Xlinker /Users/USERNAME/Library/Developer/Xcode/DerivedData/PROJECT_NAME-aknkujyaqvqjswbhspmawywtyqee/Build/Intermediates/PROJECT_NAME.build/Release-iphoneos/PROJECT_NAME.build/Objects-normal/arm64/PROJECT_NAME_dependency_info.dat -o /Users/USERNAME/Library/Developer/Xcode/DerivedData/PROJECT_NAME-aknkujyaqvqjswbhspmawywtyqee/Build/Products/Release-iphoneos/PROJECT_NAME.app/PROJECT_NAME
和“vtable for CRYPTOPP::~.o”总是会发生。附上通知:
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
最佳答案
Undefined symbols for architecture arm64: "CryptoPP::BufferedTransformation::ChannelFlush(std::string const&, bool, int, bool)", referenced from:
vtable for CryptoPP::SimpleProxyFilter in MYCLASSBBB.o
vtable for CryptoPP::Bufferless<CryptoPP::Filter> in MYCLASSBBB.o
我认为您没有使用libc++
,这是 LLVM 的 C++ 标准库。我认为那是因为我没有看到 -stdlib=libc++
(但我不记得它是否直接传递给了 ld
)。
符号在 github's prebuilt cryptopp 中定义(那是我的 github,顺便说一句)。以下是验证方法。
首先从fat库中提取arm64库:
$ xcrun -sdk iphoneos lipo libcryptopp.a -thin arm64 -output libcryptopp-arm64.a
$ ls
libcryptopp-arm64.a libcryptopp.a
接下来,使用 nm
转储全局符号,并使用 c++filt
拆解:
$ nm -g libcryptopp-arm64.a | c++filt | grep BufferedTransformation::ChannelFlush | grep " T "
0000000000002110 T CryptoPP::BufferedTransformation::ChannelFlush(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, int, bool)
国会大厦 T
表示您正在搜索已定义和导出的符号。低t
表示其定义的但 未导出 - 即私有(private)。国会大厦U
表示未定义。
__1
是什么libc++
(LLVM) 用于区分 libstdc++
(GNU)。 std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >
是 string
,因此可以重写为:
CryptoPP::BufferedTransformation::ChannelFlush(std::__1::string const&, bool, int, bool)
如果这个库是针对 libstdc++
构建的(GNU),那么库中的符号将是:
CryptoPP::BufferedTransformation::ChannelFlush(std:::string const&, bool, int, bool)
我们可以对第二个有问题的 child 重复,它遵循相同的模式( libc++
,而不是 libstdc++
):
$ nm -g libcryptopp-arm64.a | c++filt | grep CryptoPP::Filter::CopyRangeTo2 | grep " T "
00000000000001c4 T CryptoPP::Filter::CopyRangeTo2(CryptoPP::BufferedTransformation&, unsigned long long&, unsigned long long, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) const
这可以重写为:
CryptoPP::Filter::CopyRangeTo2(CryptoPP::BufferedTransformation&, unsigned long long&, unsigned long long, std::__1::string const&, bool) const
如果您需要 GNU 的 libstdc++
, 然后你可以自己构建它。以下是步骤:
cryptopp-mobile.zip
.在 Crypto++ 源文件之上解压它GNUmakefile
, 通过搜索以 IS_IOS
开头的 block 找到 iOS 规则IS_IOS
中的这一行 block :CXXFLAGS += -stdlib=libc++
.将其更改为 CXXFLAGS += -stdlib=libstdc++
我下载了 Cocos2D-x 并试图查看其配置(我不是 Cmake 专家,所以我可能对以下内容有误)。它在CmakeList.txt
中有以下内容:
if(MSVC)
ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS
-wd4251 -wd4244 -wd4334 -wd4005 -wd4820 -wd4710
-wd4514 -wd4056 -wd4996 -wd4099)
else()
set(CMAKE_C_FLAGS_DEBUG "-g -Wall -DCOCOS2D_DEBUG=1")
set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-exceptions -std=c99")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -std=c++11 -Wno-deprecated-declarations -Wno-reorder")
if(CLANG)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
endif()
endif(MSVC)
如果 Cmake 正在做我怀疑的事情,那么它使用的是 LLVM 的 libc++
.但它也使用 -std=c++11
,并且 GitHub 项目没有使用它。但我不确定-std=c++11
在这里有所作为。
只是自行车脱落,但这是一个不好的迹象:_SCL_SECURE_NO_WARNINGS
.如果他们公然这样做,那么他们可能有不同程度的不良和 splinter 。 (只是我在审计软件方面的经验)。
如果有兴趣,__1
是用于版本控制的内联命名空间。参见 What are inline namespaces for?和 Where does the __1 symbol come from when using LLVM's libc++? .
关于c++ - Crypto++/iOS 64 位项目中的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28311795/
我正在尝试更新一些较旧的代码以消除警告。我已经升级了一些使用加密模块的代码。然而,webpack 5.88.2没有识别新的语法。我的新导入内容如下所示:。完整的错误如下所示。这表明我可能需要另一个插件
是否有任何 C 或 C++ 函数可以产生与此 python 代码相同的输出(SHA512 with salt)? import crypt; crypt.crypt('test', '$6$Salte
我正在开发一个使用 Crypto++ 使用 RSA 加密一些数据的项目。 这是我的 Crypto++ 代码: string plain = "Text123", encoded, cipher; st
收到错误,因为 require 不是一个函数,尝试在 typescript 组件中使用加密 js 函数 // Load modules 'use strict'; var Crypto = requi
我正在尝试将下面的java代码转换为nodejs。 public static String encrypt(String accessToken) throws Exception {
我有一个旨在在 Node.js 中使用的签名方法,但我想使用 crypto-js 在客户端实现它。它应该可以在最新的 Chrome 版本中运行。 我尝试遵循以下一些答案:Decode a Base64
我想知道 Crypto.Signature.PKCS1_v1_5 和 Crypto.Signature.pkcs1_15 有什么区别? 在documentation他们使用此函数 Crypto.Sig
我们有一个使用 Crypto++ 库的 ECC 部分的 C++ 解决方案,但必须转移到 .NET 解决方案。由于 Microsoft 的 ECC 代码的文档最少,我目前正在试验文档最少的 Bouncy
我在验证 Web Crypto API 创建的签名时遇到问题。 这是我用来在浏览器中生成 RSA key 的代码: let keys; const generateKeys = async () =>
嗨,所以我有一个运行 Crypto 的服务器,它工作得很好。我使用 electrojs 作为客户端,并且加密应该内置到 Node 中。当我尝试使用该模块时,它返回“crypto.scryptSync
使用 Apple 的 Common Crypto 和 Crypto++ 使用相同的 key 加密相同的文件(二进制数据)时,我得到了不同的结果。我使用的算法是 AES。 这是使用 Common Cry
如何存储 crypto.createHash('sha1') 的当前状态(在它被 hash.update(buffer) 填充后)以在另一个地方使用它http请求可能发生在node.js的不同进程?
我正在使用 NodeJS 的捆绑 crypto服务器端的 SHA256 哈希模块。在客户端,我使用一个名为 Crypto-JS 的 javascript 库. 我将 SHA256 哈希值用于使用基于经
我想编写一个使用 linux crypto-api 进行数字签名的 C 程序。不幸的是,我找不到关于 linux api 和 linux/crypto.h 中定义的函数的良好文档(谷歌搜索没有帮助,这
我正在尝试使用 JUNIT 在实际执行 AES 加密的方法中模拟 cipher.doFinal()。我在启动 JUNIT 测试用例时遇到异常 "Tried to access class javax.
您好,我在Liferay dxp项目中使用Paytm校验和依赖项 但我得到error :com.sun.crypto.provider.AESCipher$General cannot be cast
我正在尝试使用 crypto-js javascript 库加密数据,并尝试使用 Node 加密库在 Nodejs 端解密相同的加密文本。我正在使用 AES 256 加密算法和 CTR 模式,没有填充
我想了解 javax.crypto.Mac 之间的区别和 javax.crypto.Cipher 。这两个类看起来非常相似(它们具有相似的方法,但是这两个类并不互相继承)。 这两个类之间的根本区别是什
我正在尝试在设备上生成 SHA256 和 HmacSHA512 哈希值,不幸的是,该设备不支持标准 Node crypto 库。所以我正在调整代码以使用 CryptoJS 代替。但是,CryptoJS
我正在使用 Android FingerPrintManager API 并使用 KeyPairGenerator 创建 key 对,我想使用公钥加密密码,然后在用户通过输入 fingerPrint
我是一名优秀的程序员,十分优秀!