C++ SDK 常见问题

最近更新时间:2024-11-04 20:24:12

我的收藏

编译可执行程序的时候提示错误: 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.zip
cd poco-poco-1.9.4-release/
./configure --omit=Data/ODBC,Data/MySQL
mkdir my_build
cd my_build
cmake ..
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。