编译可执行程序的时候提示错误: PocoCrypto.so.64: undefined reference ,该如何处理?
PocoCrypto.so.64: undefined reference to `PEM_write_bio_PrivateKey@libcrypto.so.10'libPocoNetSSL.so.64: undefined reference to `X509_check_host@libcrypto.so.10'ibPocoCrypto.so.64: undefined reference to `ECDSA_sign@OPENSSL_1.0.1_EC'libPocoCrypto.so.64: undefined reference to `CRYPTO_set_id_callback@libcrypto.so.10'ibPocoCrypto.so.64: undefined reference to `EVP_PKEY_id@libcrypto.so.10'libPocoNetSSL.so.64: undefined reference to `SSL_get1_session@libssl.so.10'libPocoNetSSL.so.64: undefined reference to `SSL_get_shutdown@libssl.so.10'libPocoCrypto.so.64: undefined reference to `EVP_PKEY_set1_RSA@libcrypto.so.10'libPocoCrypto.so.64: undefined reference to `SSL_load_error_strings@libssl.so.10'
这种情况一般是工程里自带的 poco 库的编译依赖的 SSL 版本与客户机器上的版本不一致导致的,需要用户重新编译 poco 库,并替换掉 third_party 里的poco库。
注意
此处建议执行以下命令从 github下载源码。如果从 poco 官网下载,请下载 COMPLETE 版本。
wget https://github.com/pocoproject/poco/archive/refs/tags/poco-1.9.4-release.zipcd poco-poco-1.9.4-release/./configure --omit=Data/ODBC,Data/MySQLmkdir my_buildcd my_buildcmake ..make -j5
编译 poco 库的时候无法编译出 PocoNetSSL 库,该如何处理?
一般是因为机器没装 openssl-devel 库。使用如下命令安装。
yum install -y openssl-devel
编译可执行程序的时候提示错误: undefined reference to qcloud_cos ,该如何处理?
undefined reference to `qcloud_cos::CosConfig::CosConfig(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
这种情况一般是因为工程自带的 libcossdk.a 编译使用的 gcc 版本与客户机器上的 gcc 版本不一致导致的,需要客户重新编译 poco 库和 libcossdk。
C++ SDK 报错请求过期:Request has expired,该如何处理?
由于签名过期导致,重新生成签名即可解决;若重新生成签名仍报相同的错误,可以再检查下机器的本地时间是否已设置为标准的北京时间。
C++ SDK 在使用协程时,解析 resp body 出现 coredump,该如何处理?
因为 rapidxml 会在栈上分配64KB的静态内存, 如果协程栈太小的话, 会访问越界导致 core。解决方案:
1、调整栈大小。
2、减小 include/rapidxml/1.13/rapidxml.hpp 中关于静态内存分配的定义,#define RAPIDXML_STATIC_POOL_SIZE。
编译 Mac arm 版本的 SDK 出现编译失败,该如何处理?
1、Mac 编译并安装1.12.0版本的 poco。
2、替换 third_party/lib/macOS/poco 中的库文件。
3、替换掉 third_party/include/Poco 中的头文件。
4、重新编译 cos cpp sdk。