阿里云 OSS 海思交叉编译

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 可执行文件

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值