基于freescale i.Mx6(ARM)的阿里云oss调试记录

时间:2022-09-08 14:16:59

交叉编译阿里OSS调试记录

1.1 开通oss服务

具体参考以下链接:

https://help.aliyun.com/document_detail/31884.html?spm=a2c4g.11186623.6.558.n2g1UA

1.2 SDK安装

在ubuntu下安装,安装步骤如下:

  • 安装CMake

执行以下命令安装CMake。

sudo apt-get install cmake
  • 安装第三方库

执行以下命令安装第三方库。

sudo apt-get install libcurl4-openssl-dev libapr1-dev libaprutil1-dev libmxml-dev

下载oss sdk,链接为:

https://github.com/aliyun/aliyun-oss-c-sdk

编译安装OSS C SDK

典型的编译命令如下:

1.  cmake .
2.  make
3.  make install

注意:

  • 执行cmake . 时默认会到/usr/local/下面去寻找curlaprapr-utilmxml的头文件和库文件。
  • 默认编译是Debug类型,可以指定以下几种编译类型: Debug, Release, RelWithDebInfoMinSizeRel,如果要使用release类型编译,则执行cmake -f CMakeLists.txt -DCMAKE_BUILD_TYPE=Release
  • 如果您在安装curlaprapr-utilmxml时指定了安装目录,则需要在执行cmake时指定这些库的路径,
  • 比如:cmake -f CMakeLists.txt -DCURL_INCLUDE_DIR=/usr/local/include/curl/ -DCURL_LIBRARY=/usr/local/lib/libcurl.so -DAPR_INCLUDE_DIR=/usr/local/include/apr-1/ -DAPR_LIBRARY=/usr/local/lib/libapr-1.so -DAPR_UTIL_INCLUDE_DIR=/usr/local/apr/include/apr-1 -DAPR_UTIL_LIBRARY=/usr/local/apr/lib/libaprutil-1.so -DMINIXML_INCLUDE_DIR=/usr/local/include -DMINIXML_LIBRARY=/usr/local/lib/libmxml.so
  • 如果要指定安装目录,则需要在cmake时增加: -DCMAKE_INSTALL_PREFIX=/your/install/path/usr/local/
  • 如果执行cmake时报以下错误:Could not find apr-config/apr-1-config,原因是在默认路径里面找不到apr-1-config文件,这时候可以在执行cmake命令时,在最后面加上-DAPR_CONFIG_BIN=/path/to/bin/apr-1-config。如果报:Could not find apu-config/apu-1-config,则需要加上-DAPU_CONFIG_BIN=/path/to/bin/apu-1-config

参考链接:

https://help.aliyun.com/document_detail/32132.html?spm=a2c4g.11186623.6.795.puijFV

注:

如果在ubuntu14.04上执行”cmake .”命令时会出现报错信息:CMAKE_CXX_COMPILER-NOTFOUND,则需要安装g++: apt-get install g++

然后再执行:

cmake  .

make

make install

即可

安装依赖库(ubuntu下的依赖库与交叉依赖库)

https://help.aliyun.com/document_detail/32132.html?spm=a2c4g.11186623.6.797.Bf6aUL

我自己在ubuntu下的编译oss-c-sdk时的命令

cmake -f CMakeLists.txt -DCURL_INCLUDE_DIR=/usr/local/include/curl/ -DCURL_LIBRARY=/usr/local/lib/libcurl.so -DAPR_INCLUDE_DIR=/usr/local/apr/include/apr-1 -DAPR_LIBRARY=/usr/local/apr/lib/libapr-1.so -DAPR_UTIL_INCLUDE_DIR=/usr/local/apr/include/apr-1 -DAPR_UTIL_LIBRARY=/usr/local/apr/lib/libaprutil-1.so -DMINIXML_INCLUDE_DIR=/usr/local/include -DMINIXML_LIBRARY=/usr/local/lib/libmxml.so

1.3 demo程序运行

1.3.1 下载demo程序

下载oss的demo程序,链接为:

http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/32132/cn_zh/1487730555529/aliyun-oss-c-sdk-demo.tar.gz?spm=a2c4g.11186623.2.14.ljDN1R&file=aliyun-oss-c-sdk-demo.tar.gz

demo程序的使用说明可以参考:

https://help.aliyun.com/document_detail/32132.html

https://yq.aliyun.com/articles/60924?spm=a2c4g.11186623.2.15.ljDN1R

1.3.2 编译运行demo程序

进入到oss-c-sdk-demo-ubuntu工程目录,修改main.c,下面修改的内容是参照3.1节开通oss服务时对应的内容。

const char OSS_ENDPOINT[] = "oss-cn-shanghai.aliyuncs.com";

const char ACCESS_KEY_ID[] = "LTAIGMGKwETW7Rbj";

const char ACCESS_KEY_SECRET[] = "i8MX7RAOY5Z5sCNQ721glLWxd4CVTw";

const char BUCKET_NAME[] = "pandarobot";

const char OBJECT_NAME[] = "SouthIsland_NewZealand.jpg";

执行make命令,发现

基于freescale i.Mx6(ARM)的阿里云oss调试记录

进入到/usr/local/include/oss_c_sdk,编辑aos_define.h

修改 #include < apr_time.h>  为  #include<apr-1/ apr_time.h>

继续make,出现类似的错误继续修改,直到make成功

然后输入 ./main

发现报错

基于freescale i.Mx6(ARM)的阿里云oss调试记录

那是因为目标程序需要依赖库

1、首先打开/etc/ld.so.conf文件

2、加入动态库文件所在的目录:执行vi /etc/ld.so.conf,在"include ld.so.conf.d/*.conf"下方增加"/usr/local/lib"。

3、保存后,在命令行终端执行:/sbin/ldconfig -v;其作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新搜索路径,需要运行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。

参考链接:

https://www.cnblogs.com/codingmengmeng/p/7456539.html

再次编译运行./main

然后在阿里云的oss上就可以看到刚刚上传的SouthIsland_NewZealand.jpg

基于freescale i.Mx6(ARM)的阿里云oss调试记录

32位的ubuntu下,编译demo程序时,会报错:

/usr/local/include/oss_c_sdk/aos_define.h:11:28: fatal error: apr-1/apr_time.h: No such file or directory

修改Makefile,红色方框中为增加的内容

基于freescale i.Mx6(ARM)的阿里云oss调试记录

再次编译的时候,会有以下错误/usr/include/apr-1.0/apr.h:358:1: error: unknown type name ‘off64_t’

这是因为32位的ubuntu不支持off64_t,编辑/usr/include/apr-1.0/apr.h第358行,将off64_t改成off_t,再次编译就可以通过了。

参考链接:https://*.com/questions/22663897/unknown-type-name-off64-t

1.3.3 交叉编译运行demo程序

1.3.3.1 安装交叉编译器

针对我们的机器人主控板ControllerMain使用的是FreeScale的iMx.6,安装对应的交叉编译器。

将freescale.tar.gz放到/opt目录下

tar zxvf freescale.tar.gz

将交叉编译器增加到环境变量中

gedit  /etc/profile

在文件最后增加内容如下:

export ARCH=arm

export CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-

export PATH=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin:$PATH

基于freescale i.Mx6(ARM)的阿里云oss调试记录

执行source /etc/profile,使交叉编译器生效,最好再reboot

安装32bit的兼容库

apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0

然后查看交叉编译器版本

arm-fsl-linux-gnueabi-gcc  -v

如果能够查看到版本,说明交叉编译器安装成功

基于freescale i.Mx6(ARM)的阿里云oss调试记录

1.3.3.2 交叉编译demo程序

进入到oos-c-sdk-demo-ubuntu目录,修改makefile

gedit Makefile

修改INCLUDES和CC如下图所示

基于freescale i.Mx6(ARM)的阿里云oss调试记录

然后执行make命令,发现报错如下:

基于freescale i.Mx6(ARM)的阿里云oss调试记录

然后进入到/usr/include/curl/目录下

gedit curlrules.h

发现如下这段

基于freescale i.Mx6(ARM)的阿里云oss调试记录

意思是我们在1.2节所安装的libcurl的执行程序在这里不适用了,我们要重新交叉编译libcurl。

1.       安装curl

于是,在网上找libcurl的源代码工程

https://curl.haxx.se/download.html

下载链接为:

file:///D:/Documents/Downloads/curl-7.59.0.tar.gz

将curl-7.59.0.tar.gz复制到ubuntu中,交叉编译

这里将curl-7.59.0.tar.gz放到~/kevin 目录下

tar zxvf curl-7.59.0.tar.gz

然后交叉编译curl:

./configure --prefix=/home/kevin/dependLib/libcurl --host=arm-none-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++

Ubuntu 32bit:

./configure --prefix=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/libcurl --host=arm-none-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++

make

make install

如果configure按照如下配置执行:

./configure --host=arm-none-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++

那么libcurl会在以下目录:

/usr/local/lib

参考链接:

ARM平台移植libcurl curl-7.49.0

http://blog.csdn.net/miaodichiyou/article/details/51451134

交叉编译生成的libcurl在/home/kevin/ dependLib /libcurl目录下

Libraries have been installed in:

/home/kevin/dependLib/libcurl/lib

再次进入到oos-c-sdk-demo-ubuntu目录,修改makefile

基于freescale i.Mx6(ARM)的阿里云oss调试记录

然后再次执行make命令,发现报错

基于freescale i.Mx6(ARM)的阿里云oss调试记录

然后到/usr目录下查找mxml.h,发现它在include目录下,继续修改makefile

基于freescale i.Mx6(ARM)的阿里云oss调试记录

继续执行make命令,发现报错如下

基于freescale i.Mx6(ARM)的阿里云oss调试记录

修改makefile,重新指定oss_c_sdk和curl的目录

基于freescale i.Mx6(ARM)的阿里云oss调试记录

继续make,发现报错减少

基于freescale i.Mx6(ARM)的阿里云oss调试记录

2.       安装apr

下载apr的源代码

http://apr.apache.org/download.cgi

https://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.3.tar.gz

http://archive.apache.org/dist/apr/apr-1.5.2.tar.gz

基于freescale i.Mx6(ARM)的阿里云oss调试记录

在ubuntu中解压,进入apr文件夹,

新建arm-linux.cache

gedit arm-linux.cache,填写以下内容

apr_cv_process_shared_works=yes

apr_cv_mutex_robust_shared=yes

保存,退出。

输入以下命令

./configure --prefix=/home/kevin/dependLib/apr/ --host=arm-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ LD=arm-none-linux-gnueabi-ld ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes ac_cv_sizeof_struct_iovec=8 apr_cv_tcp_nodelay_with_cork=yes --cache=arm-linux.cache

Ubuntu 32bit下,输入以下命令

./configure --prefix=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/apr/ --host=arm-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ LD=arm-none-linux-gnueabi-ld ac_cv_file__dev_zero=yes apr_cv_mutex_robust_shared=yes apr_cv_process_shared_works=yes ac_cv_func_setpgrp_void=yes ac_cv_sizeof_struct_iovec=8 apr_cv_tcp_nodelay_with_cork=yes --cache=arm-linux.cache

参考链接:

https://www.cnblogs.com/zhangsf/archive/2013/08/21/3272960.html

https://blog.csdn.net/u010394807/article/details/50761770

发现报错:cannot remove `libtoolT’: No such file or directory

网上找到一些解决方案,就是编辑 configure文件,查找 $RM "$cfgfile" 这个地方,用#注释掉,然后就可以了

基于freescale i.Mx6(ARM)的阿里云oss调试记录

参考链接:https://my.oschina.net/u/146514/blog/196168

继续./configure……  发现报错

继续修改configure

#gedit configure

具体修改内容如下

还需要对configure文件进行一下修改,搜索apr_ssize_t可以定位到下面一段代码:

{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which format to use for apr_ssize_t" >&5

$as_echo_n "checking which format to use for apr_ssize_t... " >&6; }

if test -n "$ssize_t_fmt"; then

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: %$ssize_t_fmt" >&5

$as_echo "%$ssize_t_fmt" >&6; }

elif test "$ac_cv_sizeof_ssize_t" = "$ac_cv_sizeof_int"; then

ssize_t_fmt="d"

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: %d" >&5

$as_echo "%d" >&6; }

elif test "$ac_cv_sizeof_ssize_t" = "$ac_cv_sizeof_long"; then

ssize_t_fmt="ld"

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: %ld" >&5

$as_echo "%ld" >&6; }

else

as_fn_error $? "could not determine the proper format for apr_ssize_t" "$LINENO" 5

fi

将中间添加一段代码(红色标注),修改为

{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which format to use for apr_ssize_t" >&5

$as_echo_n "checking which format to use for apr_ssize_t... " >&6; }

if test -n "$ssize_t_fmt"; then

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: %$ssize_t_fmt" >&5

$as_echo "%$ssize_t_fmt" >&6; }

elif test "$ac_cv_sizeof_ssize_t" = "$ac_cv_sizeof_int"; then

ssize_t_fmt="d"

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: %d" >&5

$as_echo "%d" >&6; }

elif test "$ac_cv_sizeof_ssize_t" = "$ac_cv_sizeof_long"; then

ssize_t_fmt="ld"

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: %ld" >&5

$as_echo "%ld" >&6; }

elif test "$ac_cv_sizeof_ssize_t" = "$ac_cv_sizeof_long_long";then

ssize_t_fmt="lld"

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: %lld" >&5

$as_echo "%lld" >&6; }

else

as_fn_error $? "could not determine the proper format for apr_ssize_t" "$LINENO" 5

fi

搜索apr_size_t可以定位到下面一段代码

{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which format to use for apr_size_t" >&5

$as_echo_n "checking which format to use for apr_size_t... " >&6; }

if test -n "$size_t_fmt"; then

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: %$size_t_fmt" >&5

$as_echo "%$size_t_fmt" >&6; }

elif test "$ac_cv_sizeof_size_t" = "$ac_cv_sizeof_int"; then

size_t_fmt="d"

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: %d" >&5

$as_echo "%d" >&6; }

elif test "$ac_cv_sizeof_size_t" = "$ac_cv_sizeof_long"; then

size_t_fmt="ld"

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: %ld" >&5

$as_echo "%ld" >&6; }

else

as_fn_error $? "could not determine the proper format for apr_size_t" "$LINENO" 5

fi

将中间添加一段代码(红色标注),修改为:

{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which format to use for apr_size_t" >&5

$as_echo_n "checking which format to use for apr_size_t... " >&6; }

if test -n "$size_t_fmt"; then

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: %$size_t_fmt" >&5

$as_echo "%$size_t_fmt" >&6; }

elif test "$ac_cv_sizeof_size_t" = "$ac_cv_sizeof_int"; then

size_t_fmt="d"

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: %d" >&5

$as_echo "%d" >&6; }

elif test "$ac_cv_sizeof_size_t" = "$ac_cv_sizeof_long"; then

size_t_fmt="ld"

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: %ld" >&5

$as_echo "%ld" >&6; }

elif test "$ac_cv_sizeof_size_t" = "$ac_cv_sizeof_long_long"; then

size_t_fmt="lld"

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: %lld" >&5

$as_echo "%lld" >&6; }

else

as_fn_error $? "could not determine the proper format for apr_size_t" "$LINENO" 5

fi

执行make命令,发现报错

基于freescale i.Mx6(ARM)的阿里云oss调试记录

报错原因:

因为gen_test_char 使用编译工具编译出来的,但交叉编译出的gen_test_char这个工具在宿主机上无法使用,

所以可以先./configure 再make 将工具保存起来 在执行交叉编译configure,再把工具cp回原位置并修改makefile 执行即解决

完整编译流程如下:

./configure

make clean

make

cp -a tools/gen_test_char ..

make clean

./configure --prefix=/home/kevin/dependLib/apr --host=arm-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ LD=arm-none-linux-gnueabi-ld ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes ac_cv_sizeof_struct_iovec=8 apr_cv_tcp_nodelay_with_cork=yes --cache=arm-linux.cache

cp -a ../gen_test_char tools/

gedit Makefile

134 行

OBJECTS_gen_test_char = tools/gen_test_char.lo $(LOCAL_LIBS)

屏蔽

#OBJECTS_gen_test_char = tools/gen_test_char.lo $(LOCAL_LIBS)

目的是不生成新的gen_test_char文件

gedit include/apr_want.h 第93行 #ifndef APR_IOVEC_DEFINED 替换成#if  0

make

make install

Libraries have been installed in:

/home/kevin/dependLib/apr//lib

如果configure按照如下命令执行:

./configure --host=arm-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ LD=arm-none-linux-gnueabi-ld ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes ac_cv_sizeof_struct_iovec=8 apr_cv_tcp_nodelay_with_cork=yes --cache=arm-linux.cache

那么lib会在以下目录:

Libraries have been installed in:

/usr/local/apr/lib

参考链接:

http://blog.csdn.net/m0_37263637/article/details/78590853

3.   安装apr-util

下载链接为:http://apr.apache.org/download.cgi

tar -xvzf apr-util-1.4.1.tar.gz

cd apr-util-1.4.1.

mkdir /home/kevin/dependLib/apr-util

./configure

./configure --prefix=/home/kevin/dependLib/apr-util --with-apr=/home/kevin/dependLib/apr --host=arm-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ LD=arm-none-linux-gnueabi-ld

Ubuntu 32bit 下:

./configure --prefix=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/apr-util --with-apr=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/apr --host=arm-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ LD=arm-none-linux-gnueabi-ld

make

中间过程出现报错

xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory

网上PC平台说是说缺少了xml的解析器。查阅网络资料后找到了解决方案,下载libexpat,并交叉编译

git clone https://github.com/libexpat/libexpat.git

cd expat/

./buildconf.sh

出现报错

基于freescale i.Mx6(ARM)的阿里云oss调试记录

apt-get install autoconf automake libtool

继续输入以下指令

./configure --prefix=/home/kevin/dependLib/expat/ --with-docbook -host=arm-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++

Ubuntu 32bit下

./configure --prefix=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/expat/ --with-docbook -host=arm-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++

出现报错

基于freescale i.Mx6(ARM)的阿里云oss调试记录

apt-get install docbook2x

automake

make

make install

–with-expat=/home/kevin/dependLib/expat, expat安装目录加入到apr-util-1.6.1 configure中。

进入到apr-util-1.6.1目录中

apr-util-1.5.4/xlate/xlate.c的handle_special_names函数,直接关掉本地编码相关的两个判断,直接返回return page; 即:72 75行

//  return apr_os_default_encoding(pool);

return page;

基于freescale i.Mx6(ARM)的阿里云oss调试记录

参考链接:http://blog.csdn.net/freeman1975/article/details/53482713

完整版的命令如下:

./configure --prefix=/home/kevin/dependLib/apr-util --host=arm-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --with-apr=/home/kevin/dependLib/apr --with-expat=~/kevin/dependLib/libexpat/expat --with-expat=/home/kevin/dependLib/expat

Ubuntu 32位下:

./configure --prefix=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/apr-util --host=arm-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --with-apr=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/apr --with-expat=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/expat

make

make install

Libraries have been installed in:

/home/kevin/dependLib/apr-util/lib

如果configure按照以下配置:

./configure  --host=arm-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --with-apr=/home/kevin/dependLib/apr --with-expat=~/kevin/dependLib/libexpat/expat --with-expat=/home/kevin/dependLib/expat

那里库会安装到下列目录中:

Libraries have been installed in:

/usr/local/apr/lib

/usr/bin/install -c -m 644 aprutil.exp /usr/local/apr/lib

/usr/bin/install -c -m 755 apu-config.out /usr/local/apr/bin/apu-1-config

参考链接:

http://blog.csdn.net/m0_37263637/article/details/78590853

4.       安装mxml

mxml的下载链接为:

https://github.com/michaelrsweet/mxml/releases

https://github.com/michaelrsweet/mxml/releases/download/v2.11/mxml-2.11.tar.gz

tar -xvzf mxml-2.11.tar.gz

cd mxml-2.11

./configure --prefix=/home/kevin/dependLib/mxml --host=arm-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++

Ubuntu 32bit 下:

./configure --prefix=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/mxml --host=arm-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++

make

make install

如果configure按照如下进行配置:

./configure --host=arm-linux CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++

那么库会被安装到如下目录:

Installing libmxml.so to /usr/local/lib...

Installing libmxml.a to /usr/local/lib...

Installing mxmldoc in /usr/local/bin...

Installing documentation in /usr/local/share/doc/mxml...

Installing header files in /usr/local/include...

Installing pkgconfig files in /usr/local/lib/pkgconfig...

Installing man pages in /usr/local/share/man...

参考链接:

http://blog.csdn.net/sukhoi27smk/article/details/19633601

以上1~4步完成的是Apache的交叉编译

5.       oss_c_sdk交叉编译

参考链接:

http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/pdf/oss-sdk-intl-zh-2018-03-14.pdf?spm=a3c0i.o32169zh.a3.13.26855ac5zpO1jp&file=oss-sdk-intl-zh-2018-03-14.pdf

https://help.aliyun.com/document_detail/32132.html?spm=a2c4g.11186623.6.796.apHDuU

进入到aliyun-oss-c-sdk目录

CMakeList.txt开头增加如下内容

SET(CMAKE_SYSTEM_NAME Linux)

SET(TOOLCHAIN_DIR "/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain")

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-none-linux-gnueabi-gcc)

SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm-none-linux-gnueabi-g++)

FIND_PROGRAM(APR_CONFIG_BIN NAMES apr-config apr-1-config PATHS /home/kevin/dependLib/apr/bin /usr/bin /usr/local/bin /usr/local/apr/bin/)

FIND_PROGRAM(APU_CONFIG_BIN NAMES apu-config apu-1-config PATHS /home/kevin/dependLib/apr-util/bin /usr/bin /usr/local/bin /usr/local/apr/bin/)

Ubuntu 32位下:

FIND_PROGRAM(APR_CONFIG_BIN NAMES apr-config apr-1-config PATHS /root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/apr/bin /usr/bin /usr/local/bin /usr/local/apr/bin/)

FIND_PROGRAM(APU_CONFIG_BIN NAMES apu-config apu-1-config PATHS /root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/apr-util/bin /usr/bin /usr/local/bin /usr/local/apr/bin/)

基于freescale i.Mx6(ARM)的阿里云oss调试记录

然后输入以下命令

cmake . -DCMAKE_INSTALL_PREFIX=/home/kevin/dependLib/oss_c_sdk -DCURL_INCLUDE_DIR=/home/kevin/dependLib/libcurl/include/ -DCURL_LIBRARY=/home/kevin/dependLib/libcurl/lib/libcurl.a -DAPR_INCLUDE_DIR=/home/kevin/dependLib/apr/include/apr-1 -DAPR_LIBRARY=/home/kevin/dependLib/apr/lib/libapr-1.a -DAPR_UTIL_INCLUDE_DIR=/home/kevin/dependLib/apr-util/include/apr-1 -DAPR_UTIL_LIBRARY=/home/kevin/dependLib/apr-util/lib/libaprutil-1.a -DMINIXML_INCLUDE_DIR=/home/kevin/dependLib/mxml/include/ -DMINIXML_LIBRARY=/home/kevin/dependLib/mxml/lib/libmxml.a

make,发现报错如下:

基于freescale i.Mx6(ARM)的阿里云oss调试记录

Ubuntu下生成oss sdk 的lib时:

cmake . -DCMAKE_INSTALL_PREFIX=/home/kevin/dependLib/oss_c_sdk -DCURL_INCLUDE_DIR=/usr/local/include -DCURL_LIBRARY=/usr/local/lib/libcurl.a -DAPR_INCLUDE_DIR=/usr/local/apr/include/apr-1 -DAPR_LIBRARY=/usr/local/apr/lib/libapr-1.a -DAPR_UTIL_INCLUDE_DIR=/usr/local/apr/include/apr-1 -DAPR_UTIL_LIBRARY=/usr/local/apr/lib/libaprutil-1.a -DMINIXML_INCLUDE_DIR=/usr/local/include -DMINIXML_LIBRARY=/usr/local/lib/libmxml.a –DMATH_LIBRARY=/home/kevin/dependLib/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/usr/lib/libm.a –DM_LIBRARY=/home/kevin/dependLib/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/usr/lib/libm.a –DPTHREAD_LIBRARY=/home/kevin/dependLib/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/usr/lib/libpthread.a –DRT_LIBRARY=/home/kevin/dependLib/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/usr/lib/librt.a

Ubuntu 32位下,交叉编译oss sdk的lib时:

修改CMakeList.txt

屏蔽最后两行

基于freescale i.Mx6(ARM)的阿里云oss调试记录

然后执行以下命令:

cmake . -DCMAKE_INSTALL_PREFIX=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm /oss_c_sdk -DCURL_INCLUDE_DIR=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/libcurl/include -DCURL_LIBRARY=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/libcurl/lib/libcurl.a -DAPR_INCLUDE_DIR=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/apr/include/apr-1 -DAPR_LIBRARY=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/apr/lib/libapr-1.a -DAPR_UTIL_INCLUDE_DIR=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/apr-util /include/apr-1 -DAPR_UTIL_LIBRARY=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/apr-util/lib/libaprutil-1.a -DMINIXML_INCLUDE_DIR=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/mxml/include -DMINIXML_LIBRARY=/root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/mxml/lib/libmxml.a

6.       oss_c_sdk-demo程序交叉编译

进入到oss-c-sdk-demo目录中,修改Makefile为

INCLUDES = -I. -I /root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/oss_c_sdk/include/oss_c_sdk -I /root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/expat/include -I /root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/libcurl/include -I /root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/apr/include/apr-1 -I /root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/apr-util/include/apr-1 -I /root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/mxml/include

SRCS = main.c

OBJS = $(SRCS:.c=.o)

CC = arm-fsl-linux-gnueabi-gcc

CFLAGS = -Wall -O -g

LDFLAGS := -L /root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/oss_c_sdk/lib -L /root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/expat/lib -L /root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/libcurl/lib -L /root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/apr/lib -L /root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/apr-util/lib -L /root/panda/PicoIPC-mqtt/oss/dependlib/dependlib-arm/mxml/lib

LDFLAGS += -lpthrad -loss_c_sdk -lcurl -lmxml -lapr-1 -lexpat -laprutil-1

#LIBS = -lpthread -loss_c_sdk -lcurl -lmxml -lapr-1 -laprutil-1

EXE = main

$(EXE):$(OBJS)

$(CC) $^ -o $@ $(LDFLAGS)

%.o: %.c

$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@

clean:

rm -f $(EXE) $(OBJS)

基于freescale i.Mx6(ARM)的阿里云oss调试记录

将交叉编译生成的库拷贝到ControllerMain的/usr/lib目录中,注意名称要改成下列名称:

liboss_c_sdk.so.3.0.0

libcurl.so.4

libmxml.so.1

libapr-1.so.0

libexpat.so.1

libaprutil-1.so.0

如果拷贝这些库的话,在ControllerMain中执行oss的demo程序时,会报错:cannot open shared object file: No such file or directory

如果在ControllerMain中运行程序是出现如下错误:

put object from buffer failed

put object from file failed, code:403, error_code:RequestTimeTooSkewed, error_msg:The difference between the request time and the current time is too large., request_id:5AC983F72F08FBB69F72F8BB

get object to buffer failed

get object to local file failed

需要将系统时间设定为北京时间减去8小时,因为ControllerMain使用的是UTC时间,北京时间为UTC+8时区的时间。

设置系统时间的命令:

date 2018.04.08-03:03:00

hwclock -w

hwclock -r

基于freescale i.Mx6(ARM)的阿里云oss调试记录的更多相关文章

  1. 构建基于阿里云OSS文件上传服务

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50710132 <构建基于阿里云OSS文件上传服务> <构建基于OS ...

  2. phpcmsv9 阿里云OSS云存储整合教程

    该教程算不上是phpcmsv9阿里云oss插件,所以整个修改及其代码覆盖前请一定记得备份.还有一点就是后台发布文章时上传的附件还是会保存在你的服务器上,基于以下原因:1.个人的需求是前台页面需要使用t ...

  3. 在OneThink(ThinkPHP3&period;2&period;3)中整合阿里云OSS的PHP-SDK2&period;0&period;4,实现Web端直传,服务端签名直传并设置上传回调的实现流程

    在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现本地文件上传流程 by shuijingwan · 2016/01/13 1.SDK安装 github ...

  4. 发布阿里云OSS for phpcmsV9整合教程

    说明:这个算不上是插件,因为没有安装包,需要手工修改代码. 还有一点就是后台发布文章时上传的附件还是会保存在你的服务器上,基于以下原因: 1.个人的需求是前台页面需要使用thumb函数生成多个缩略图大 ...

  5. 阿里云oss挂载到linux本地文件系统

    对象存储 OSS 阿里云对象存储服务 (OSS) 是一种高度可伸缩且安全可靠的云对象存储服务,让您可以存储.备份和归档大量数据.阿里云 OSS 是一种简单易用的服务,让您每秒能处理数百万请求,它还支持 ...

  6. C&num; &period;net Ueditor实现图片上传到阿里云OSS 对象存储

    在学习的时候,项目中需要实现在Ueditor编辑器中将图片上传到云储存中,老师演示的是上传到又拍云存储,既然看了一遍,直接照搬不算本事,咱们可以依葫芦画瓢自己来动手玩玩其它的云存储服务. 现在云计算产 ...

  7. SpringBoot 2&period;0整合阿里云OSS,实现动静分离架构

    前言 相信大部分开发者对下面这张架构图并不陌生吧,现在很多网站/应用都采用了动静分离的架构进行部署.博主的博客也不例外,主机采用的是阿里云的 ECS,使用 CDN 做静态内容分发,不过静态文件还是存储 ...

  8. 阿里云 OSS 如何设置防盗链&comma; 上个月图床流量耗费50G&plus;,请求次数10W&plus;&comma;什么鬼?

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  9. PHP上传文件到阿里云OSS&comma;nginx代理访问

    1. 阿里云OSS创建存储空间Bucket(读写权限为:公共读) 2. 拿到相关配置 accessKeyId:********* accessKeySecret:********* endpoint: ...

随机推荐

  1. Android 解析Json&lowbar;fastJson

    FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能.   实际上其他的json处理工具都和 ...

  2. 每天一个linux命令(52):ifconfig命令

    许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...

  3. APP交互

    交互设计基本功!5个值得学习的APP交互方式http://www.uisdc.com/5-interactive-design-worth-learning 移动App交互设计10大趋势–你用到了吗? ...

  4. Mac 安装终端软件

    1.安装或者重新安装lua环境 下载 lua 地址: http://www.lua.org/versions.html 1.进入 lua 目录 2.make macosx 3.sudo make in ...

  5. window下安装nodejs

    下载nodejs 去https://nodejs.org/en/download/下载nodejs,有.mis(安装版)和.exe(二进制版) .mis(安装版) 一般下载这个就行,简单方便,自带np ...

  6. Studio--代理设置(SDK下载代理设置)

    为啥Android Studio有代理一说呢.比如我们要下载某个插件,但是这个插件又被tc墙了,所以这个时候需要FQ才能安装.FQ其中的一种方式就是使用VPN,配置如下图: 输入VPN的IP和PORT ...

  7. LOTUS 迁移到Exchange 2010 POC 之在Exchange 2007 安装Lotus Admin&excl;

    双击Setup安装:

  8. hibernate注解原理

    持续更新中.. hibernate注解用的是java注解,用到的是java反射机制.

  9. Dot模板的使用小结2

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 【WebGL】《WebGL编程指南》读书笔记——第5章

    一.前言        终于到了第五章了,貌似开始越来越复杂了. 二.正文         Example1:使用一个缓冲区去赋值多个顶点数据(包含坐标及点大小) function initVerte ...