目录
前言
Qt项目接入阿里云SDK,实现头像图片上传功能。分别编译Mac和Windows平台,对应C++版本SDK。
首先要到官网下载SDK安装包。另外还需要有OSS的AccessKeyId,AccessKeySecret,BucketName,Endpoint,本文不做赘述。
1. Mac版
1.1 Mac所需前提条件
1.1.1 安装OpenSSL,下载地址,我使用的版本是openssl-1.1.1h
1.1.2 安装openssl需要安装CMake, 下载地址,我使用的版本是 3.19.0-rc3。如果你的Qt已经下载过CMake,次步骤略过
1.1.3 配置CMake环境变量
打开终端,用命令行就可以配置,步骤如下:
vi .bash_profile
source .zshrc
source .zshrc 是立即执行bash_profile。苹果发布macOS 10.15 后,macOS的默认终端从bash变成了zsh。
1.1.4 安装OpenSSL
在解压目录下,执行(使用sudo是因为要prefix的访问权限 ;指定 prefix是因为此目录以后使用比较方便)
sudo ./config --prefix=/usr/local/openssl
执行make
make
查看版本
openssl version
OpenSSL 1.1.1h 22 Sep 2020 这表示安装正确
1.2 安装阿里SDK
进入sdk压缩包解压文件夹,配置openssl环境变量
-
cmake -DOPENSSL_ROOT_DIR=/usr/local//openssl \
-
-DOPENSSL_LIBRARIES=/usr/local/openssl/lib \
-
-DOPENSSL_INCLUDE_DIRS=/usr/local/openssl/include/
也可以通过修改 CMakeCache.txt 实现
如果只需要动态库,上传图片功能,可以通过配置编译选项裁剪代码:
-
cmake
-
-DBUILD_SHARED_LIBS=ON
-
-DOSS_DISABLE_BUCKET=ON
-
-DOSS_DISABLE_LIVECHANNEL=ON
-
-DOSS_DISABLE_RESUAMABLE=ON
-
-DOSS_DISABLE_ENCRYPTION=ON
贴一个全命令
-
cmake -DOPENSSL_ROOT_DIR=/usr/local//openssl \
-
-DOPENSSL_LIBRARIES=/usr/local/openssl/lib \
-
-DOPENSSL_INCLUDE_DIRS=/usr/local/openssl/include/ \
-
-DBUILD_SHARED_LIBS=ON \
-
-DOSS_DISABLE_BUCKET=ON \
-
-DOSS_DISABLE_LIVECHANNEL=ON \
-
-DOSS_DISABLE_RESUAMABLE=ON \
-
-DOSS_DISABLE_ENCRYPTION=ON
最后的.. 命令是执行的命令。
make
然后到/usr/local/openssl 路径下 复制 lib文件和include文件。因为静态库和动态库都有,只导入动态库即可。静态库文件尺寸相对大一点。
将动态库和头文件都复制到Qt工程路径下
1.3 导入库文件
在Qt 项目 .pro 文件中加入 库文件路径
-
# alibabacloud sdk
-
macx: LIBS += -L$$PWD/./ -lalibabacloud-oss-cpp-sdk
-
# openssl lib
-
macx: LIBS += -L$$PWD/./ -lssl.1.1
-
macx: LIBS += -L$$PWD/./ -lcrypto.1.1
-
INCLUDEPATH += $$PWD/.
-
DEPENDPATH += $$PWD/.
Mac版SDK接入完毕。
2. Windows版
2.1 Win所需前提条件
2.1.1 安装Visual Studio 2013以上版本。我使用的是2019版本。
2.1.2 打开VS开发者工具,查看cmake工具
cmake -version
2.2 安装阿里SDK
打开阿里云sdk安装包解压路径,创建build文件夹。
cmake -DBUILD_SHARED_LIBS=ON -DOSS_DISABLE_BUCKET=ON -DOSS_DISABLE_LIVECHANNEL=ON -DOSS_DISABLE_RESUAMABLE=ON -DOSS_DISABLE_ENCRYPTION=ON -A Win32 ..
-A Win32 是编译32位系统工程。
这些配置也可以在CMakeLists.txt中修改
-
#Options
-
option(BUILD_SHARED_LIBS "Enable shared library" ON)
-
option(BUILD_SAMPLE "Build sample" OFF)
-
option(BUILD_TESTS "Build unit and perfermence tests" OFF)
-
option(ENABLE_COVERAGE "Flag to enable/disable building code with -fprofile-arcs and -ftest-coverage. Gcc only" OFF)
-
option(ENABLE_RTTI "Flag to enable/disable building code with RTTI information" ON)
-
option(OSS_DISABLE_BUCKET "" ON)
-
option(OSS_DISABLE_LIVECHANNEL "" ON)
-
option(OSS_DISABLE_RESUAMABLE "" ON)
-
option(OSS_DISABLE_ENCRYPTION "" ON)
在build路径下,打开.sln 工程。 分别编译Debug版本和Release版本。编译完成之后,在Debug和Releasse下生成库文件
这里我手动把Debug路径下的lib和dll文件名字加了一个d,为了和Release版本库文件做区别。
2.3 导入库文件
-
# alibabaCloud SDK
-
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/./ -lalibabacloud-oss-cpp-sdk
-
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/./ -lalibabacloud-oss-cpp-sdkd
-
win32: LIBS += -L$$PWD/./ -llibcurl
-
win32: LIBS += -L$$PWD/./ -llibeay32
-
win32: LIBS += -L$$PWD/./ -lssleay32
最后把第三方库文件和头文件都引入到Qt工程中。third_party
最后补充一点,我的windows工程,用的是static静态库文件。因为动态dll文件报错。最后导入静态库,才可以正常使用。