阿里云OSS-C-SDK交叉编译环境配置记录
开发板环境是arm32架构的,开发环境是ubuntu18.04。
交叉编译环境配置
首先下载交叉编译工具:https://developer.arm.com/downloads/-/gnu-a
解压得到文件夹:gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf
新建文件夹 mkdir /opt/tool-chain
将编译链放在新建的文件夹下:
sudo mv gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf /opt/tool-chain/
将交叉编译环境添加到环境变量:
编辑.bashrc
新增以下三行:
export ARCH=arm
export CROSS_COMPILE=arm-none-linux-gnueabihf-
export PATH=$PATH:/opt/tool-chain/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin
使其生效:source ~/.bashrc
通过查看交叉编译链的版本,确认是否成功配置:arm-none-linux-gnueabihf-gcc -v
有以上输出表示配置成功!
需要明确:交叉编译环境的路径为:/opt/tool-chain/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/
第三方库安装
sudo apt install cmake
curl 库安装
安装包:libcurl-7.32.0
下载地址:https://curl.se/download/curl-7.32.0.tar.gz
解压后得到:curl-7.32.0
文件夹
安装过程:
cd curl-7.32.0
./configure --prefix=/home/cclike/curl --host=arm-none-linux CC=arm-none-linux-gnueabihf-gcc CXX=arm-none-linux-gnueabihf-g++
make
make install
apr 库安装
安装包:apr-1.5.2
下载地址:https://archive.apache.org/dist/apr/apr-1.5.2.tar.gz
解压后得到:apr-1.5.2
文件夹
安装过程(安装之前可以先看看遇到的问题):
cd apr-1.5.2
./configure --prefix=/home/cclike/apr-1 --host=arm-none-linux CC=arm-none-linux-gnueabihf-gcc CXX=arm-none-linux-gnueabihf-g++ ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes apr_cv_process_shared_works=yes apr_cv_mutex_robust_shared=yes apr_cv_tcp_nodelay_with_cork=yes ap_void_ptr_lt_long=no
make // 确保已经安装make:sudo apt install make
make install
遇到的问题:
- 执行
./configuare
的时候,会遇到下面的问题:
config.status: executing libtool commands
rm: cannot remove 'libtoolT': No such file or directory
config.status: executing default commands
解决方案:
编辑configuare
文件,给RM添加啊参数:-f
- 执行make的时候遇到的问题:
cclike@RV1109:~/Downloads/apr-1.5.2$ make
make[1]: Entering directory '/home/cclike/Downloads/apr-1.5.2'
/home/cclike/Downloads/apr-1.5.2/build/mkdir.sh tools
/bin/bash /home/cclike/Downloads/apr-1.5.2/libtool --silent --mode=compile arm-none-linux-gnueabihf-gcc -g -O2 -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -I./include -I/home/cclike/Downloads/apr-1.5.2/include/arch/unix -I./include/arch/unix -I/home/cclike/Downloads/apr-1.5.2/include/arch/unix -I/home/cclike/Downloads/apr-1.5.2/include -I/home/cclike/Downloads/apr-1.5.2/include/private -I/home/cclike/Downloads/apr-1.5.2/include/private -o tools/gen_test_char.lo -c tools/gen_test_char.c && touch tools/gen_test_char.lo
/bin/bash /home/cclike/Downloads/apr-1.5.2/libtool --silent --mode=link arm-none-linux-gnueabihf-gcc -g -O2 -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -I./include -I/home/cclike/Downloads/apr-1.5.2/include/arch/unix -I./include/arch/unix -I/home/cclike/Downloads/apr-1.5.2/include/arch/unix -I/home/cclike/Downloads/apr-1.5.2/include -I/home/cclike/Downloads/apr-1.5.2/include/private -I/home/cclike/Downloads/apr-1.5.2/include/private -no-install -o tools/gen_test_char tools/gen_test_char.lo -lrt -lcrypt -ldl
/home/cclike/Downloads/apr-1.5.2/build/mkdir.sh include/private
tools/gen_test_char > include/private/apr_escape_test_char.h
/bin/bash: tools/gen_test_char: cannot execute binary file: Exec format error
Makefile:141: recipe for target 'include/private/apr_escape_test_char.h' failed
make[1]: *** [include/private/apr_escape_test_char.h] Error 126
make[1]: Leaving directory '/home/cclike/Downloads/apr-1.5.2'
/home/cclike/Downloads/apr-1.5.2/build/apr_rules.mk:118: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1
解决方案:
gcc -Wall -O2 -DCROSS_COMPILE tools/gen_test_char.c -s -o gen_test_char // 确保已安装gcc sudo apt install gcc
./gen_test_char > ../include/private/apr_escape_test_char.h
修改当前目录的Makefile,禁止生成gen_test_char
保存退出之后重新执行make
遇到下面的问题:
cclike@RV1109:~/Downloads/apr-1.5.2$ make
make[1]: Entering directory '/home/cclike/Downloads/apr-1.5.2'
/bin/bash /home/cclike/Downloads/apr-1.5.2/libtool --silent --mode=compile arm-none-linux-gnueabihf-gcc -g -O2 -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -I./include -I/home/cclike/Downloads/apr-1.5.2/include/arch/unix -I./include/arch/unix -I/home/cclike/Downloads/apr-1.5.2/include/arch/unix -I/home/cclike/Downloads/apr-1.5.2/include -I/home/cclike/Downloads/apr-1.5.2/include/private -I/home/cclike/Downloads/apr-1.5.2/include/private -o encoding/apr_escape.lo -c encoding/apr_escape.c && touch encoding/apr_escape.lo
In file included from ./include/apr_strings.h:52,
from encoding/apr_escape.c:31:
./include/apr_want.h:94:8: error: redefinition of 'struct iovec'
94 | struct iovec
| ^~~~~
In file included from /opt/tool-chain/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/libc/usr/include/sys/socket.h:26,
from ./include/apr.h:168,
from ./include/apr_escape.h:22,
from encoding/apr_escape.c:28:
/opt/tool-chain/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/libc/usr/include/bits/types/struct_iovec.h:26:8: note: originally defined here
26 | struct iovec
| ^~~~~
/home/cclike/Downloads/apr-1.5.2/build/apr_rules.mk:206: recipe for target 'encoding/apr_escape.lo' failed
make[1]: *** [encoding/apr_escape.lo] Error 1
make[1]: Leaving directory '/home/cclike/Downloads/apr-1.5.2'
/home/cclike/Downloads/apr-1.5.2/build/apr_rules.mk:118: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1
直接编辑对应文件,注释掉iovec结构体
重新直接make,编译通过
expat 库安装
安装这个库是因为在编译apr-util库的时候会报expat库的错
xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory#include <expat.h>
安装包:expat-2.2.5.tar.bz2
下载地址:https://github.com/libexpat/libexpat/releases/download/R_2_2_5/expat-2.2.5.tar.bz2
解压生成:expat-2.2.5
安装过程:
cd expat-2.2.5
./configure --prefix=/home/cclike/expat --host=arm-none-linux CC=arm-none-linux-gnueabihf-gcc CXX=arm-none-linux-gnueabihf-g++
make
make install
apr-util 库安装
安装包:apr-util-1.5.4
下载地址:https://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
解压生成:apr-util-1.5.4
安装过程:
cd apr-util-1.5.4
./configure --prefix=/home/cclike/apr-util --host=arm-none-linux CC=arm-none-linux-gnueabihf-gcc CXX=arm-none-linux-gnueabihf-g++ --with-apr=/home/cclike/apr-1 --with-expat=/home/cclike/expat
make
make install
libmxml 库安装
安装包:mxml-2.8
下载地址:https://github.com/michaelrsweet/mxml/releases/download/release-2.8/mxml-2.8.tar.gz
解压生成:mxml-2.8
安装过程:
cd mxml-2.8
./configure --prefix=/home/cclike/mxml --host=arm-none-linux CC=arm-none-linux-gnueabihf-gcc CXX=arm-none-linux-gnueabihf-g++
make
make install
遇到下面的问题:
cclike@RV1109:~/Downloads/mxml-2.8$ make
Compiling mxml-attr.c
Compiling mxml-entity.c
Compiling mxml-file.c
Compiling mxml-get.c
Compiling mxml-index.c
Compiling mxml-node.c
Compiling mxml-search.c
Compiling mxml-set.c
Compiling mxml-private.c
Compiling mxml-string.c
Creating libmxml.so.1.5...
Compiling mxmldoc.c
mxmldoc.c:913:1: warning: 'remove_directory' defined but not used [-Wunused-function]
remove_directory(const char *path) /* I - Directory to remove */
^~~~~~~~~~~~~~~~
Linking mxmldoc...
Creating libmxml.a...
a - mxml-attr.o
a - mxml-entity.o
a - mxml-file.o
a - mxml-get.o
a - mxml-index.o
a - mxml-node.o
a - mxml-search.o
a - mxml-set.o
a - mxml-private.o
a - mxml-string.o
Compiling testmxml.c
Linking testmxml...
Testing library...
Makefile:352: recipe for target 'testmxml' failed
make: *** [testmxml] Error 2
目前还没有找到解决办法,但是上面的make动作已经生成了我们需要的头文件和链接库
所以只需要将对应的文件拷贝出来即可:
到这里第三方库基本上就安装完成了,说到底安装第三方库也只是为了得到对应的库文件和头文件。我的做法是把所有的库文件进行汇总,方便再makefile中进行引用。
OSS-C-SDK 安装
安装包:aliyun-oss-c-sdk-3.5.0.tar.gz
下载地址:https://github.com/aliyun/aliyun-oss-c-sdk/archive/refs/tags/3.5.0.tar.gz
解压后得到:aliyun-oss-c-sdk-3.5.0
安装步骤:
cd aliyun-oss-c-sdk-3.5.0
编辑CMakeList.txt
将下面内容添加到文件开头
SET(CMAKE_SYSTEM_NAME Linux)
SET(TOOLCHAIN_DIR "/opt/tool-chain/arm-rockchip830-linux-uclibcgnueabihf/")
SET(CMAKE_SYSTEM_PROCESSOR MIPS)
SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_DIR})
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/arm-rockchip830-linux-uclibcgnueabihf-gcc)
SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm-rockchip830-linux-uclibcgnueabihf-g++)
修改apr和apr-util的路径为我们前面安装的路径:
FIND_PROGRAM(APR_CONFIG_BIN NAMES apr-config apr-1-config PATHS /home/cclike/RV1109/oss/third_lib/apr-1/bin /usr/local/bin /usr/local/apr/bin/)
FIND_PROGRAM(APU_CONFIG_BIN NAMES apu-config apu-1-config PATHS /home/cclike/RV1109/oss/third_lib/apr-util/bin /usr/local/bin /usr/local/apr/bin/)
注释掉文件最后两行,这些是不需要的
# add_subdirectory(oss_c_sdk_sample)
# add_subdirectory(oss_c_sdk_test)
安装
cmake . \
-DCMAKE_INSTALL_PREFIX=/home/cclike/RV1109/oss/sdk \
-DCURL_INCLUDE_DIR=/home/cclike/RV1109/oss/third_lib/curl/include \
-DCURL_LIBRARY=/home/cclike/RV1109/oss/third_lib/curl/lib \
-DAPR_INCLUDE_DIR=/home/cclike/RV1109/oss/third_lib/apr-1/include \
-DAPR_LIBRARY=/home/cclike/RV1109/oss/third_lib/apr-1/lib \
-DAPR_UTIL_INCLUDE_DIR=/home/cclike/RV1109/oss/third_lib/apr-util/include \
-DAPR_UTIL_LIBRARY=/home/cclike/RV1109/oss/third_lib/apr-util/lib \
-DMINIXML_INCLUDE_DIR=/home/cclike/RV1109/oss/third_lib/mxml/include \
-DMINIXML_LIBRARY=/home/cclike/RV1109/oss/third_lib/mxml/lib \
-DPTHREAD_LIBRARY=arm-rockchip830-linux-uclibcgnueabihf/sys-root/usr/lib/libpthread.a \
-DMATH_LIBRARY=arm-rockchip830-linux-uclibcgnueabihf/sys-root/usr/lib/libm.a \
-DRT_LIBRARY=arm-rockchip830-linux-uclibcgnueabihf/sys-root/usr/lib/librt.a
make
make install