linux下的sqlite3的编译安装 for arm

来源:互联网 发布:上海软件著作权登记 编辑:程序博客网 时间:2024/04/29 14:05

第一步 sqlitearm-linux下的编译

1、下载sqlite-amalgamation-3.3.8.tar.gz 

2、确认arm-linux-toolchains.tgz 已经安装到你的linux系统,没有安装的请到http://www.arm9.com.cn/temp/arm-linux-toolchains.tgz 下载安装; 

同时你可以用命令which arm-linux-gcc检查 (下面是我的检查结果)

/usr/local/arm/2.95.3/bin/arm-linux-gcc

通过上面的检查后我们知道编译器的路径,这样如果我们有必要的话可以按照下面的命令来设置交叉器环境变量。

# export PATH=/usr/local/arm/2.95.3/bin/:$PATH

 

3、建立目录,解压下载的sqlite-amalgamation-3.3.8.tar.gz(解压:tar -xfzv  压缩:tar -cfzv)

 

4、在解压目录下建立build文件夹(mkdir)

 

5build文件目录下运行配置命令

# ../configure --host=arm-linux --prefix=/root/sqlite-3.3.8/build --disable-tcl

这个是执行build文件目录下的configure命令,--host=arm-linux意思是使用交叉编译器 ,--disable-tcl屏蔽tcl接口。

这个时候就会在build目录之下生成:config.log,config.status,libtool,Makefile四个文件。

如果出现了如下错误:configure: error: unable to find a compiler for building build tools  前面检查arm-linux-gcc都通过了,怎么还说没有找到编译器呢?

结合configure.ac看了一下,原来是要设置config_TARGET_CC和config_BUILD_CC两个环境变量。config_TARGET_CC是交叉编译器,config_BUILD_CC是主机编译器。  [root@linux sqlite-3.3.4]# export config_BUILD_CC=gcc 

 [root@linux sqlite-3.3.4]# export config_TARGET_CC=arm-linux-gcc 

[root@linux sqlite-3.3.4]# ./configure --host=arm-linux --prefix=$ROOTFS_DIR/usr --disable-tcl   

   注:这个地方有个--disable-tcl选项,是因为在sqlite给我们提供的有c接口和tcl接口的,但是我们在实际的应用中用的只有c接口的,而tcl接口其实是不必要用的,故在此加上此选项后可以减去生成的makefile中屏蔽掉关于tcl的选项这一操作。   

  出现了如下错误:  checking for /usr/include/readline.h... configure:  error: cannot check for file existence when cross compiling 

 readline我们已经编译过了,readline.h是肯定存在,没有必要检查。可在cache文件里设置ac_cv_header_readline_h=yes,骗过configure脚本:

[root@linux sqlite-3.3.4]# echo ac_cv_header_readline_h=yes >arm-linux.cache

  [root@linux sqlite-3.3.4]#./configure --host=$ARCH-linux –prefix = $ROOTFS_DIR/usr –disable-tcl --cache-file=arm-linux.cache 

 这回配置成功了

 6、继续运行# make && make install

有的机器上会出现下列错误:  libtool: compile: unable to infer tagged confi- guration libtool: compile: specify a tag with `--tag'  这时检查一下libtool里的CC变量是否设置为arm-linux-gcc,如果不是,可以手工改过来,或者设置环境变量lt_compiler=arm-linux-gcc,重新配置一下。   事实上我们所需烧写在板子上的是库文件 sqlite.so、sqlite.so.0、sqlite.so.0.8.6 要放入板子/lib 目录。

注明: "# make install" 这一步将会在 /root/sqlite-3.3.8/build/bin生成二进制可执行文件sqlite3 , /root/sqlite-3.3.8/build/include生成头文件sqlite3.h,以及在/root/sqlite-3.3.8/build/lib 生成libsqlite3.a静态库文件和libsqlite3.so.0,libsqlite3.so.0.8.6动态库文件等。

可以将sqlite3和lib中的文件拷贝到你的arm板上,使用命令./sqlite test.db运行

会出现
sqlite>
提示符号,打个“.help”来看看命令先:-)
sqlite>.help
好了。现在sqlite已经在arm-linux下跑了起来

 

 

8、交叉编译应用应用程序

arm-linux-gcc –o exam.out  exam.c –I /root/sqlite-3.3.58/build/include –L /root/sqlite-3.3.8/build/lib -lsqlite3

 

9.运行编译后的程序

由于上面是动态编译所以必须把库文件(libsqlite3.so.0)也下载到目标板。

(1)可以把库文件放到/lib目录之下

(2)也可以放到其他地方然后用环境命令进行设置:

# export LD_LIBRARY_PATH=/root/sqlite-3.3.58/build/lib:$LD_LIBRARY_PATH

(3) 修改Linux系统文件/etc/ld.so.conf,添加sqlite库文件位置 /usr/local/lib 到此文件里面。然后重起或者运行ldconfig 重新读取配置。

有了库文件编译后的应用程序就可以运行了:

./ exam.out  tex.db

./ exam.o  tex.db

 

注:如果说你没有按照上面新建一个build目录的步骤进行编译,可能会出现如下之类的错误:

找不到sqlite3_***操作函数。

/bld/simple.o: In function `main': 
/bld/simple.o (.text+0xd5): undefined reference to `sqlite3_open' 
/bld/simple.o: undefined reference to `sqlite3_close'

解决办法:

1在编译的时候忘记执行make install一步,导致库文件没有被放置到正确的地方。

2能是编译时候configure没有配置正确,导致在后期的make操作将sqlite编译出问题。

3没有正确找到库文件。可以使用如下的方式将其全部路径加入编译命令中。行如:

gcc simple.c -o simple -L/< your directory>/bld/.libs/ -lsqlite3

 

参考:http://blog.chinaunix.net/u2/76480/showart_1132777.html

等等一些写的不错的文章

0 0