最近学习了sqlite的am335x移植,根据自己在该过程中出现的问题,做了小结,以备后续使用。
一、准备工作——环境介绍
1、
主机环境:Ubuntu10.04
2、
交叉编译工具:arm-linux-gnueabihf-gcc(/home/am335x/linux-devkit/sysroots/i686-linux/bin/)主要确保在该目录下能找到你的编译器,另外该编译器要和开发板所使用的编译器一样,否则不兼容,会报错。
3、
软件包:sqlite-autoconfig-3090200.tar.gz
4、
把sqlite-autoconfig-3090200.tar.gz解压到主机的/home/user(可以指定任何你想存放的目录,这个目录用来存放编译后产生的所有文件)。
二、移植步骤
1、
配置SQlite
源文件解压后产生sqlite-autoconfig-3090200文件夹,在该文件夹下进行配置,主要是交叉编译器的指定、编译文件路径的指定、创建Makefile文件等。在终端里运行如下命令:
#mkdir sqlite_install //在sqlite-autoconfig-3090200文件夹下创建安装目录;
#./configure
–prefix=/home/user/sqlite-autoconfig-3090200/sqlite_install
–host=arm-linuxgnueabihf
CC=/home/am335x/linux-devkit/sysroots/i686-arago-linux/usr/bin/arm-linux-gnueabihf-gcc
注:以上命令为一条。
–prefix一行是指定的安装目录;
--host一行指明运行的平台;
配置参数CC指明交叉编译器的路径;
注:要根据自己实际情况进行配置。
2、
编译
配置完成后,需要修改Makefile文件和config.log文件中的错误,不知道其他版本是否需要修改。在这两个文件中定位-DPACKAGE_STRING=\”sqlite\
3.9.2\”,在sqlite\后有个空格没有删除,一定要将这两个文件中此处的空格删除,虽然编译没有出错,但拷到开发板上后会出现如下错误:line1: syntax error : unexpected “(“(expecting)”)”
此时在终端执行make,完成对安装程序的编译。
3、
安装
执行make install命令,结束后在sqlite-autoconfig-3090200/sqlite_install目录下可以看到
生成了lib、bin、include、share四个文件夹。Bin目录下是可执行文件sqlite3;lib目录下是编译生成的库文件;包括共享库和静态库;share目录下是帮助文档man。
4、
“瘦身”
可以通过file命令来查看各个文件的信息。刚生成的bin目录下和lib目录下的文件较大,有很多无用信息,所以需要进行“瘦身”,这样也不会占用开发板太大的空间。
在/home/user/sqlite-autoconfig-3090200/sqlite_install/bin/目录下对sqlite3进行“瘦身”:/home/am335x/linux-devkit/sysroots/i686-arago-linux/usr/bin/arm-linux-gnueabihf-strip
sqlite3
回车后就会看到sqlite3可执行文件从2.5M大小变为496K;使用该方法对lib目录下的libsqlite3.so.0.8.6进行“瘦身”。
5、
移植
(1)、将sqlite3和libsqlite3.so.0.8.6文件分别拷贝到开发板/usr/bin和/usr/lib目录下。
(2)、创建共享库的软链接
在开发板/usr/lib/文件夹下进行如下操作:
#ln –s libsqlite3.so.0.8.6 libsqlite3.so.0
#ln –s libsqlite3.so.0 libsqlite3.so
可以执行如下命令进行查看:#ls
–l||grep sqlite
(注:软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息)。
6、
测试
在/usr/lib/目录下执行:sqlite3,出现错误:
sqlite3:error while loading shared libaries :libreadline.so.5:can not open
shared object No such file or directory;根据提示,需要找到libreadline.so.5.2文件,因为libreadline.so.5是由libreadline.so.5.2进行软链接得到的。在Ubuntu虚拟机中找到该文件(存于:/am335x/linux-devkit/sysroots/armv7ahf-vfp-neon-3.2-oe-linux-gnueabi/usr/lib/中找到);
拷到开发板上后进行软链接操作:
#ln –s libreadline.so.5.2 libreadline.so.5
#ln –s libreadline.so.5 libreadline.so
执行sqlite3后又出现错误,提示找不到libncurses.so.5、libtinfo.so.5;根据相应的提示返回虚拟机找到文件,拷到开发板上后,进行如上的软链接,执行sqlite3,出现:
#sqlite3
SQlite version 3.9.2 2016-01-05 18:31:45
Enter “.help” for usage hints.
Connectd to a transient in-memory database.
Use “.open FILENAME” to reopen on a
persistent database.
sqlite>
sqlite在等待输入命令…………
自此,才算真正完成了sqlite3的移植工作。
如有错误,欢迎指正。