零、感 叹 啊
1、Talk is cheap, show me the code!
2、No picture you say a J 8!
先来端段热舞放松一下郁闷的心情吧!!!
一、说 明
- 本文中所有的步骤均自己亲手测试/时间,并且在保证100%的真实性。
- 由于时间、水平、精力有限,文中难免会出现不准确、甚至错误的地方,也很欢迎大佬看见的话批评指正。
- 嘻嘻。。。。 。。。。。。。。收!
二、源码编译环境支持sqlite3
相信你能找到我这个文章,那么不需要我介绍 sqlite3了。那么直接开始。
最近在项目中使用到了数据库,当然首选就是咱们 sqlite3了,写好代码直接进行编译,在编译过程中出现如下错误。
$ pwd
/home/song/Desktop/sqliteTest/
$ make V=OPENWRT
......
mipsel-openwrt-linux-gcc main.o gloable.o gettime.o sqlite.o menu.o -o /home/song/Desktop/sqliteTest/bin/main -lm -Wl,--no-as-needed -lsqlite3
/home/openwrt/staging_dir/toolchain-mipsel_24kc_gcc-7.4.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.4.0/../../../../mipsel-openwrt-linux-musl/bin/ld: cannot find -lsqlite3
collect2: error: ld returned 1 exit status
Makefile:4: recipe for target '/home/song/Desktop/sqliteTest/bin/main' failed
make[1]: *** [/home/song/Desktop/sqliteTest/bin/main] Error 1
make[1]: Leaving directory '/home/song/Desktop/sqliteTest/obj'
Makefile:52: recipe for target 'obj' failed
make: *** [obj] Error 2
错误中的提示已经很明显了,就是在连接动态库 libsqlite3.so 的时候出现异常返回,是因为不存在 libsqlite3.so 的动态库。那么就需要将 sqlite3 的环境创建完善。其实 openwrt 的源码中已支持了 sqlite3 等数据库,我们只需要在进行源码编译的时候讲 sqlite3 编译进去就可以了。
1、在 openwrt 的编译环境主目录下执行下面命令:
$ sudo make menuconfig
2、在 menuconfig 中找到 Libraries --> database --> libsqlite3 ,选择为 “ Y ” ,即 标注为 “ * ” 号,如下图所示。
3、在 Utilities --> database --> sqlite3-cli ,选择为 “ * ” 号,如下图所示。
4、返回,选择 Yes保存退出config。
5、使用下面指令直接重新编译即可,确保在编译过程中系统能够正常连接网络。
$ sudo make V=99
也可以做在进入 menuconfig 的时候,直接选择 Utilities --> database --> sqlite3-cli ,选择为 “ * ” 号然后退出编译即可,因为 sqlite3-cli 依赖于前面的 libsqlite3 , 在选择 sqlite3-cli 的时候前面的 libsqlite3 会被默认选中的。
三、交叉编译工具链支持sqlite3
通过前面的编译完成,那么 openwrt 中的 sqlite3 相关的动态库文件均已经生成,但是在实际进行编译的时候,还是出现上述错误的情况,我们需要继续配置让 openwrt 的交叉编译工具链也能支持 sqlite3 。
1、首先确定自己的交叉编译工具链的位置所在。
我的openwrt的交叉编译工具链的位置配置在 ~/.bashrc 中,如下所示。
export PATH="$PATH:/home/openwrt/staging_dir/toolchain-mipsel_24kc_gcc-7.4.0_musl/bin"
export PATH="$PATH:/home/openwrt/staging_dir/"
export STAGING_DIR=/openwrt/openwrt/open_for_x86/openwrt/branches/attitude_adjustment/staging_dir
2、将 sqlite3 的 lib/ 文件和 bin/ 文件夹拷贝到交叉编译工具链所在对应文件中。
1)首先确保自己的当前位置。
$ pwd
/home/song/openwrt
2)将 staging_dir/target-mipsel_24kc_musl/usr/lib/ 文件复制到 staging_dir/toolchain-mipsel_24kc_gcc-7.4.0_musl/ 中。
$ cp staging_dir/target-mipsel_24kc_musl/usr/lib/ staging_dir/toolchain-mipsel_24kc_gcc-7.4.0_musl/ -a
3)将 staging_dir/target-mipsel_24kc_musl/usr/bin/ 文件复制到 staging_dir/toolchain-mipsel_24kc_gcc-7.4.0_musl/ 中。
$ cp staging_dir/target-mipsel_24kc_musl/usr/bin/ staging_dir/toolchain-mipsel_24kc_gcc-7.4.0_musl/ -a
好啦,废话不多说,总结写作不易,如果你喜欢这篇文章或者对你有用,请动动你发财的小手手帮忙点个赞,当然 关注一波 那就更好了,就到这儿了,么么哒(*  ̄3)(ε ̄ *)。