移植SQLite3、MPlayer、curl、openssl
目标平台:MIPS(Linux) 开发平台:PC(Ubuntu_64bits_12.04LTS)
作者:C.R.Y. 编写时间:2015.09.10
一、准备工作
-
需确保MIPS交叉工具链,并将它所在目录声明进环境变量,或放置于环境变量所在目录中。
(将mips-linux-gnu设置到PATH环境变量中:
export PATH=$PATH: /home/wishlist/toolchains/mips-gcc472-glibc216/bin/mips-linux-gnu-
以上只是设置了临时的环境变量,如果要长期有效,请将该声明写入~/.bashrc中。)
-
在输出目录(比如/home/wishlist/out)下建立相应名字的目录(如SQLite3、MPlayer、curl、openssl),将它们的权限设置为777。
-
介绍下configure的一点特性:
“./configure--host=mips-linux-gnu --target=mips-linux --prefix=/home/wishlist/output/curl --enable-static”
大部分configure都支持以下选项,详细情况可执行该目录./configure–help。介绍:
--host: 指定要使用的交叉编译工具链的位置
--target: 指定编译出的程序运行的平台
--prefix: 指定生成文件的位置
--enable-static: 指定生成静态库
移植SQLite3
下载、放置SQLite3压缩包(sqlite-3.3.7.tar.gz)
解压
-
tarxvzf sqlite-3.3.7.tar.gz (-C /home/wishlist/workspace_testAgain/——指定解压的路径,可省略第二步)
-
将解压出来的整个目录移至操作位置(建议移动至家目录下,可避免环境变量或权限问题)
配置
-
进入解压后的SQLite,配置configure
-
export config_BUILD_CC=gcc
exportconfig_TARGET_CC=mips-linux-gcc
“还是出现如下同样的错误:
checkingfor /usr/include/readline.h... configure: error: cannot check for fileexistence when cross compiling
上面说是要检查交叉编译环境,我可以肯定我的交叉编译环境是正确的,所以我决定欺骗configure,我是这样做的cd/home/sqlite-3.3.6
将该目录下的configure文件的部分内容修改下(这里是根据test"$cross_compiling" = yes && 找到的), 这样可以让configure不去检查你的交叉编译环境。
20420行{ (exit 1); exit 1; }; }
改为{(echo 1); echo 1; }; }
20446行{(exit 1); exit 1; }; }
改为{(echo 1); echo 1; }; }”
——参考自《sqlite-3.3.6编译安装与交叉编译全过程详细记录》
执行命令
./configure--host=mips-linux-gnu- --target=mips-linux --prefix=/home/wishlist/output/sqlite3--enable-static
-
修改Makefile
将Makefile的第29行的
TCC= mips-linux-gcc -g -DOS_UNIX=1 -I. -I${TOP}/src
修改为
TCC= mips-linux-gnu-gcc -g -DOS_UNIX=1 -I. -I${TOP}/src
将第110行的
LTCOMPILE= $(LIBTOOL) --mode=compile $(TCC)
修改为
LTCOMPILE= $(LIBTOOL) --tag=CC --mode=compile $(TCC)
P.S.没有指定--tag会产生以下错误:
-
libtool: compile: unable to infertagged configuration
libtool:compile: specify a tag with `--tag'
没有将TCC修改的话,会产生以下错误:
./libtool:line 1045: mips-linux-gcc: command not found 等等的错误。
-
make&& make install
完成后将产生交叉编译完成后的sqlite3目录于/home/wishlist/output中。
测试是否移植成功
将交叉编译后的sqlite3复制到MIPS板上,比如放置于根目录下,则先声明:
exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/sqlite3/lib
后执行/sqlite3/bin/sqlite3
-
三、移植MPlayer
(一)下载、放置MPlayer压缩包(MPlayer-1.1.1.tar.xz)
(二)解压
同“二(二)”,但解压命令为tarxvJf MPlayer-1.1.1.tar.xz
(三)配置
-
进入解压后的MPlayer,配置configure
修改configure文件,将第2592行
_install_strip="-s"修改为 _install_strip=
执行命令
./configure--cc=mips-linux-gnu-gcc --prefix=/home/wishlist/output/MPlayer--target=mips-linux --as=mips-linux-gnu-as --extra-cflags=-march=mips2
-
make&& make install
完成后将产生交叉编译完成后的MPlayer目录于/home/wishlist/output中。
测试是否移植成功
/MPlayer/bin/mplayer/Movie_Size.mp3
——用MPlayer打开某首音乐(Movie_Size.mp3为测试音乐)
-
四、移植curl
(一)下载、放置curl压缩包(curl-7.30.0.tar.gz)
(二)解压
同“二(二)”
(三)配置
-
进入解压后的MPlayer,配置configure
./configure--host=mips-linux-gnu --target=mips-linux --prefix=/home/wishlist/output/curl--enable-static
-
make&& make install
完成后将产生交叉编译完成后的curl目录于/home/wishlist/output中。
测试是否移植成功
-
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/curl/lib
/curl/bin/curlwww.baidu.cn
五、移植openssl
(一)下载、放置openssl压缩包(openssl-1.0.1i.tar.gz)
(二)解压
同“二(二)”
(三)配置
-
进入解压后的openssl,执行命令
./config--prefix=/home/wishlist/output/openssl --cross-compile-prefix=/home/wishlist/toolchains/mips-gcc472-glibc216/bin/mips-linux-gnu-no-shared no-asm
“生成的Makefile,将所有linux-x86_64修改为mips,将-m64都删除”
——参考自mutes的《移植openssl-1.0.0e到mips平台》,ChinaUnix论坛
地址:http://blog.chinaunix.net/uid-20672257-id-3239249.html
-
make&& make install
完成后将产生交叉编译完成后的openssl目录于/home/wishlist/output/openssl中。
备注
实际使用中,bin/openssl这个可执行文件执行时会先读取ssl/openssl.conf这个配置文件,暂时处理方法:建议在板上建立/home/wishlist/output/openssl/ssl目录,并将我们的openssl目录中的ssl目录复制过去。
测试是否移植成功
opensslgenrsa -des3 -out test1.key 1024
-