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//这个是为了解决按键控制的问题
相关文章推荐
- 将SQLite移植到ARM板上 (转)
- sqlite移植
- 成功移植SQLite3到ARM Linux开发板
- Qt4.5.1触摸屏(tslib 1.4)+sqlite3 移植全记录
- SQLite在嵌入式linux上面的移植
- SQLite 移植
- 移植Sqlite到ARM板
- 在ARM-Linux平台上移植SQLite
- 移植数据库SQLite3到ARM Linux目标板
- sqlite3.7.0移植
- SQlite在PC和ARM上的编译移植
- 嵌入式数据库Sqlite3.3.6移植教程
- sqlite移植
- sqlite3数据库交叉编译并移植到嵌入式开发环境步骤
- SQlite在PC和ARM上的编译移植
- sqlite3移植到arm linux
- Qt4.5.1触摸屏(tslib 1.4)+sqlite3 移植全记录
- sqlite3在mini2440上的移植
- 在海思开发板上面移植sqlite3
- sqlite 移植到arm平台 和测试