最近项目中用到了云存储上传照片和视频片段,用的是Amazon S3。Amazon S3全称是Amazon Simple Storage Service。Amazon S3(Amazon Simple Storage Service),是互联网存储解决方案。该服务旨在降低开发人员进行网络规模级计算的难度。
Amazon S3 提供了一个简单的Web服务接口,可用于随时在Web上的任何位置存储和检索任何数量的数据。
Amazon S3 特意内置了着重于简易性和稳健性的最小功能集。以下是 Amazon S3 服务的一些优势:
创建存储桶 – 创建和命名存储数据的存储桶。存储桶是 Amazon S3 中用于数据存储的基础容器。
在存储桶中存储数据 – 在存储桶中存储无限量的数据。可将所需数量的对象上传到 Amazon S3 存储桶。每个对象可包含最多 5TB的数据。使用开发人员分配的唯一键值存储和检索每个对象。
下载数据 – 下载您的数据或允许其他人下载。随时下载您的数据或允许其他人执行相同的操作。
权限 - 对于要在您的 Amazon S3 存储桶中上传或下载数据的其他人员,您可授予其访问权限或拒绝其访问。将上传和下载的许可授予3种类型的用户。身份验证机制可帮助确保数据安全,以防未授权访问
标准接口 – 使用标准的REST接口(SOAP接口已弃用),它们可与任何 Internet 开发工具包搭配使用
下面把编译移植的过程整理记录如下:
一、从GitHub上下载S3源码包
git clone https://github.com/bji/libs3.git
注:Amazon S3编译过程中依赖几个第三方库,如下:
curl、openssl、xml2、iconv、zlib
需要先把它所依赖的这些第三方库编译通过后,再对S3进行编译。
二、编译移植第三方依赖库
1、编译openssl
下载地址:http://distfiles.macports.org/openssl/
我使用的版本是:openssl-1.0.2q.tar.gz
tar -xvf openssl-1.0.2q.tar.gz
cd openssl-1.0.2q
./config shared --prefix=/work/MT7628/AmazonS3/libopenssl-1.0.2q no-asm os:mipsel-linux compiler:mipsel-buildroot-linux-uclibc-gcc
./config shared —prefix=/work/MT7628/AmazonS3/libopenssl-1.0.2q no-asm
make depend
修改Makefile如下:
(1)、把所有的linux-x86_64修改为mipsel-linux
(2)、指定交叉编译工具链:
CC= mipsel-buildroot-linux-gcc
AR= mipsel-buildroot-linux-ar $(ARFLAGS) r
RANLIB= /opt/buildroot-gcc463/usr/bin/mipsel-buildroot-linux-uclibc-ranlib
NM= mipsel-buildroot-linux-uclibc-nm
MAKEDEPPROG= mipsel-buildroot-linux-uclibc-gcc
(3)、删除 -m64 (共两处)
make
make install
2、编译curl
下载地址:https://curl.haxx.se/download/
我使用的版本是:curl-7.39.0.tar.gz
tar -xvf curl-7.39.0.tar.gz
cd curl-7.39.0
./configure --build=x86_64-linux-gnu --host=mipsel-buildroot-linux-uclibc --prefix=/work/MT7628/AmazonS3/libcurl-7.39.0 CC=mipsel-buildroot-linux-uclibc-gcc —with-ssl
make
make install
3、编译xml2
下载地址:http://xmlsoft.org/sources/
我使用的版本是:libxml2-2.9.1.tar.gz
tar -xvf libxml2-2.9.1.tar.gz
cd libxml2-2.9.1
./configure --prefix=/work/MT7628/AmazonS3/libxml2-2.9.1 --host=mipsel-linux --with-iconv=no --with-zlib=no --with-python=no CC=mipsel-buildroot-linux-uclibc-gcc AR=mipsel-buildroot-linux-uclibc-ar RANLIB=mipsel-buildroot-linux-uclibc-ranlib STRIP=mipsel-buildroot-linux-uclibc-strip
make
make install
注:./configure 配置时如果不使用—with-iconv=no 和 —with-zlib=no,则编译时会依赖iconv和libz库。具体移植可以参考下面的步骤4和5.
4、编译iconv
下载地址:http://ftp.gnu.org/gnu/libiconv/
我使用的版本是:libiconv-1.13.tar.gz
tar -xvf libiconv-1.13.tar.gz
cd libiconv-1.13
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib32
./configure --prefix=/work/MT7628/AmazonS3/libiconv-1.13 —host=mipsel-linux CC=mipsel-buildroot-linux-uclibc-gcc —enable-shared
make
make install
注:编译过程中会用到系统的libz.so.1,所以需要执行export LD_LIBRARY_PATH指定系统的zlib路径。
5、编译zlib
下载地址:http://zlib.net/
我使用的版本是:zlib-1.2.11.tar.gz
tar -xvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib32/
./configure --prefix=/work/MT7628/AmazonS3/libzlib-1.2.11
修改Makefile中gcc、ar、ranlib为以下内容:
mipsel-buildroot-linux-uclibc-gcc
mipsel-buildroot-linux-uclibc-ar
mipsel-buildroot-linux-uclibc-ranlib
make
make instll
三、编译libs3
- cd libs3/
- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib32/
- 修改GNUmakefile,把交叉编译移植的第三方库路径添加进来:
4、make CC=mipsel-buildroot-linux-uclibc-gcc -f GNUmakefile
此时在当前路径下会生成build目录,build/lib/libs3.so.4即为交叉编译生成的s3动态链接库。