sqlite3移植

1/下载源码

官网下载源码

2017年7月2日20:24:05 下载了sqlite-autoconf-3190300.tar.gz


2/拆包

tar xvf sqlite-autoconf-3150200.tar.gz

该命令敲击之后会在当前目录下生成一个文件夹,文件夹下是源码


3/cd进去解压生成的文件夹


4/运行configure脚本,生成Makefile(注意选项)

./configure --prefix=$PWD/sqlite3_install  --host=arm-none-linux-gnueabi  

一般源码目录下都有configure脚本,该脚本是对当前系统进行检测,并生成一个Makefile ,移植源码到arm板的时候,一般都要填入一些选项,这些选项就是configure脚本里面的变量.

一般情况下要填入安装目录/目标主机/编译器,当然不限于这三者
注意:

--host 的取值与交叉编译器的取值保持一致
根据--host来确定运行在哪个平台,使用哪个交叉编译器
--host=arm-none-linux-gnueabi的意思是使用arm-none-linux-gnueabi交叉编译工具链
另外,可以根据CC来确定具体目录,也可以不写.不写的话,根据PATH变量中的路径查找命令
注意:每个已经编译好的交叉编译工具链都对应一种C库

据我所知,库有 glibc、uClibc、dietlibc、newlib这么几种,当然还有可能更多.

关于C库与编译器的关系请参考交叉编译工具链环境的搭建__1


5/编译

make

如果提示要权限,可以用chown 来解决


6/安装

sudo make install
我们这篇文章里面用的是当前用户家目录下的文件夹作为安装目录,所以没有必要用sudo
可以用make install

此时会当前文件夹创建一个名为sqlite3_install的文件夹,并在该目录创建一些文件夹 bin include lib share


7/剥离调试信息

剥离调试信息是为了将文件里面的调试信息去掉,因为嵌入式的硬件资源有限
如果你注意的话,编译的时候会有一个选项,就是 -g,加上这个选项的话,会在目标文件中生成调试信息,目的是为了gdb调试用.

arm-none-linux-gnueabi-strip sqlite3
arm-none-linux-gnueabi-strip libsqlite3.so.0.8.6

注意:这里要使用的工具必须是arm-none-linux-gnueabi,即和之前编译使用的工具是一系列产品


8/移植

将 sqlite3 复制到 usr/bin/目录下
将libsqlite3.so.0.8.6 复制到 lib/目录下
将 sqlite3ext.h sqlite3.h 文件复制到 inlcude/目录下

创建软链接
ln -s libsqlite3.so.0.8.6 libsqlite3.so.0
ln -s libsqlite3.so.0.8.6 libsqlite3.so
为什么不创建硬链接呢?
创建硬链接,删除源文件并不会删除链接文件的内容.
创建软链接,删除源文件,会清空连接文件的内容.

Linux动态链接库.so文件的命名及用途总结

编译时寻找libz.so,但并不使用,只是查找是否存在(linkername)
运行时寻找libz.so.1,并加载到内存,其实加载的还是libz.so.1.2.8(soname)
实际上是libz.so.1.2.8,其他的都是链接出来的(realname)


宿主机使用库文件编译:

在主机平台上编译你写的代码的时候,需要 .h文件和 .so文件的支持

  1. 把/usr/local/sqlite_result/include中的文件都复制到对应编译工具链的include路径下
  2. 把/usr/local/sqlite_result/lib中的所有文件都复制到对应编译工具链的lib目录下

参考编译时连接与运行时链接及静态库链接

然后,你写代码的时候就可以用

#include <sqlite3.h>

编译的时候用

arm-none-linux-gnueabi-gcc  -o file_target file_source -lsqlite3

因为这是第三方库,用的时候要用-l[name]来链接动态


ranlib命令找不到,解决方案

当运行sudo make install的时候
./libtool: line 1720: arm-hisiv300-linux-ranlib: command not found
make[1]: *** [install-libLTLIBRARIES] Error 127
make[1]: Leaving directory `/home/pop/src/untils/sqlite-autoconf-3190300'
make: *** [install-am] Error 2

PATH变量在/etc/profile中被修改
问题发生后,echo $PATH ,发现PATH变量里面有该命令的路径
所以怀疑是sudo 的过程中,修改了PATH
man sudo 
在ENVIRONMENT 发现
PATH            May be overridden by the security policy.
//做了个实验,
echo "echo \$PATH" > test.sh
chmod +x 
sudo ./test.sh
//结果为没有包含ranlib 命令的路径

所以解决方案为
在make install前选择用 su - 切换root用户,然后再用make install 来安装

本页之外

sqlite3 退格键不能用,移植到x86平台,解决方案

sudo apt-get install libreadline-dev//这个是为了解决按键控制的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值