Git 源码地址: https://github.com/aliyun/aliyun-oss-cpp-sdk
编译参考1: https://github.com/aliyun/aliyun-oss-cpp-sdk/blob/master/README_zh.md
编译参考2: https://help.aliyun.com/document_detail/106216.html?spm=a2c4g.11186623.6.995.23173ecaTQbF7c
下载最新发布版本,解压后进入到对应目录,本人的为: /home/guopf/tools/aliyun-oss-cpp-sdk-1.8.2
一、修改此目录下的 CMakeLists.txt 文件:
#1、设置交叉编译器,添加下面两行:
SET(CMAKE_C_COMPILER "arm-himix200-linux-gcc")
SET(CMAKE_CXX_COMPILER "arm-himix200-linux-g++")
#2、curl 和 openssl 的判断逻辑注释掉,即下面的几行全部注释掉:
include(FindCURL)
include(FindOpenSSL)
if(NOT CURL_FOUND)
message(FATAL_ERROR "Could not find curl")
endif()
if(NOT OPENSSL_FOUND)
message(FATAL_ERROR "Could not find openssl")
endif()
二、准备好依赖的 curl 和 openssl 库,通过海思交叉编译后备用,下面介绍后面用到的几个 cmake 变量
OPENSSL_INCLUDE_DIRS 和 OPENSSL_INCLUDE_DIRS 分别指定 openssl 的头文件和库文件位置
CURL_INCLUDE_DIRS 和 CURL_LIBRARIES 分别指定 curl 的头文件和库文件位置
三、在 /home/guopf/tools/aliyun-oss-cpp-sdk-1.8.2 目录下,执行下面几个命令:
1、 mkdir build
2、 cd build
3、 cmake -DBUILD_SHARED_LIBS=ON -DOPENSSL_INCLUDE_DIRS=/home/guopf/tools/huaweicloud-sdk-c-obs/build/script/Provider/build/hi3516/openssl-1.0.2r/include -DOPENSSL_LIBRARIES=/home/guopf/tools/huaweicloud-sdk-c-obs/build/script/Provider/build/hi3516/openssl-1.0.2r/lib -DCURL_INCLUDE_DIRS=/home/guopf/tools/huaweicloud-sdk-c-obs/build/script/Provider/build/hi3516/curl-7.66.0/include -DCURL_LIBRARIES=/home/guopf/tools/huaweicloud-sdk-c-obs/build/script/Provider/build/hi3516/curl-7.66.0/lib ../
说明:本人使用的openssl和curl路径,之所以带了huaweicloud等字样,是因为本人工程中也使用了华为云OBS,前面 华为云 OBS 海思交叉编译 时也依赖openssl和curl,所以这里顺便使用了这个路径,
大家编译OSS时,把这里对应的路径换成自己的即可。
4、make -j10
本人发现,上面执行make -j10 之后,会报错 undefined reference to "curl 和 openssl" 相关函数的错误,
如:
../lib/libalibabacloud-oss-cpp-sdk.so: undefined reference to `curl_easy_perform'
../lib/libalibabacloud-oss-cpp-sdk.so: undefined reference to `curl_easy_getinfo'
../lib/libalibabacloud-oss-cpp-sdk.so: undefined reference to `EVP_CIPHER_CTX_new'
... 等等一大堆
但是这个错误其实是在编译 sample 示例,即链接生成 cpp-sdk-sample 可执行文件的时候报的错,并不影响阿里 oss 库的生成,
最终在上面创建的 build 目录下的 lib 目录下,成功生成了 libalibabacloud-oss-cpp-sdk.so 和 libalibabacloud-oss-cpp-sdk.a
如果想生成上面所说的 cpp-sdk-sample 可执行文件,可以在 make -j10 之后 ,
cd /home/guopf/tools/aliyun-oss-cpp-sdk-1.8.2/build/sample ,再执行:
/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-g++ -rdynamic CMakeFiles/cpp-sdk-sample.dir/src/Config.cc.o CMakeFiles/cpp-sdk-sample.dir/src/Program.cc.o CMakeFiles/cpp-sdk-sample.dir/src/service/ServiceSample.cc.o CMakeFiles/cpp-sdk-sample.dir/src/bucket/BucketSample.cc.o CMakeFiles/cpp-sdk-sample.dir/src/object/ObjectSample.cc.o CMakeFiles/cpp-sdk-sample.dir/src/presignedurl/PresignedUrlSample.cc.o CMakeFiles/cpp-sdk-sample.dir/src/LiveChannel/LiveChannelSample.cc.o CMakeFiles/cpp-sdk-sample.dir/src/encryption/EncryptionSample.cc.o -o cpp-sdk-sample -Wl,-rpath,/home/guopf/tools/aliyun-oss-cpp-sdk-1.8.2/build/lib: ../lib/libalibabacloud-oss-cpp-sdk.so -lpthread -lssl -lcrypto -lcurl -L/home/guopf/tools/huaweicloud-sdk-c-obs/build/script/Provider/build/hi3516/curl-7.66.0/lib -L/home/guopf/tools/huaweicloud-sdk-c-obs/build/script/Provider/build/hi3516/openssl-1.0.2r/lib
上面粉红色部分是:make -j10 最后报错的打印,之所以报错是因为没有指定链接 openssl 和 curl 对应的库,
以及指定他们实际所在的路径,把蓝色部分加上之后一起执行,便可以生成 cpp-sdk-sample 可执行文件