您的位置:首页 > 数据库

sqlite3移植

2016-12-28 18:13 211 查看

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文件的支持

把/usr/local/sqlite_result/include中的文件都复制到对应编译工具链的include路径下

把/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//这个是为了解决按键控制的问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: