今天突然发现ssh无法和虚拟机中的连接,总是报server端ssh关闭,那就重启linux上的ssh吧,我用命令“ sudo /etc/init.d/ssh start "后,却说不要通过调用 这个脚本启动程序,要用服务工具,好,就改为” sudo service ssh start ", 然后再次连接,ok。
只写个ssh连接不上好像太少了,再加点吧
下载sqlite版本3.7.9 http://www.sqlite.org/download.html
源码包:sqlite-autoconf-3070900.tar.gz
解压源码包到/opt目录下:
# tar xvzf sqlite-autoconf-3070900.tar.gz –C /opt/
建立make install目录
# mkdir /opt/build
进入解压出得文件夹中:
# cd /opt/sqlite-autoconf-3070900
执行configure命令,生成Makefile文件:# ./configure CC=/home/wangwei/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/arm-none-linux-gnueabi-gcc --disable-tcl --host=arm-linux –prefix=/opt/build
生成Makefile文件后,执行make命令,进行交叉编译,再执行make install 命令进行安装,就可以在指定的目录的lib下找到编译好的库。
补充说明,我看网上很多说交叉编译的,他们有一些都没有说要指定CC变量,仅仅指定了--host,这样好像不行,在进行configure时会有警告。
我进行的编译很顺利,没有什么错误。下边是一些从网站上找到的关于出错时该怎么修改:
使用arm-linux-gcc 4.3.2版本执行make后会有错误提示,终止编译,命令行打印信息如下(后来使用arm-linux-gcc 4.4.3版本无错误提示,可以直接完成编译):
/bin/sh ./libtool --tag=CC --mode=compile arm-linux-gcc -DPACKAGE_NAME=\"sqlite\" -DPACKAGE_TARNAME=\"sqlite\" -DPACKAGE_VERSION=\"3.7.9\" -DPACKAGE_STRING=\"sqlite\ 3.7.9\" -DPACKAGE_BUGREPORT=\"http://www.sqlite.org\" -DPACKAGE_URL=\"\" -DPACKAGE=\"sqlite\" -DVERSION=\"3.7.9\" -D_FILE_OFFSET_BITS=64 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DHAVE_FDATASYNC=1 -DHAVE_USLEEP=1 -DHAVE_LOCALTIME_R=1 -DHAVE_GMTIME_R=1 -DHAVE_DECL_STRERROR_R=1 -DHAVE_STRERROR_R=1 -DHAVE_POSIX_FALLOCATE=1 -I.@am__isrc@ -D_REENTRANT=1 -DSQLITE_THREADSAFE=1 -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_RTREE -g -O2 -MT sqlite3.lo -MD -MP -MF .deps/sqlite3.Tpo -c -o sqlite3.lo sqlite3.c
mkdir .libs
arm-linux-gcc -DPACKAGE_NAME=\"sqlite\" -DPACKAGE_TARNAME=\"sqlite\" -DPACKAGE_VERSION=\"3.7.9\" "-DPACKAGE_STRING=\"sqlite 3.7.9\"" -DPACKAGE_BUGREPORT=\"http://www.sqlite.org\" -DPACKAGE_URL=\"\" -DPACKAGE=\"sqlite\" -DVERSION=\"3.7.9\" -D_FILE_OFFSET_BITS=64 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DHAVE_FDATASYNC=1 -DHAVE_USLEEP=1 -DHAVE_LOCALTIME_R=1 -DHAVE_GMTIME_R=1 -DHAVE_DECL_STRERROR_R=1 -DHAVE_STRERROR_R=1 -DHAVE_POSIX_FALLOCATE=1 -I.@am__isrc@ -D_REENTRANT=1 -DSQLITE_THREADSAFE=1 -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_RTREE -g -O2 -MT sqlite3.lo -MD -MP -MF .deps/sqlite3.Tpo -c sqlite3.c -fPIC -DPIC -o .libs/sqlite3.o
arm-none-linux-gnueabi-gcc: 3.7.9": No such file or directory
<command-line>: warning: missing terminating " character
查找原因,与前文的make信息-DPACKAGE_STRING=\"sqlite\ 3.7.9\"相比较,发现是因为"-DPACKAGE_STRING=\"sqlite 3.7.9\""字符之间空格没有转义字符\(之后发现是使用交叉编译器arm-linux-gcc4.3.2会出现这个错误)。
修改Makefile文件:
# vim Makefile
在136行找到-DPACKAGE_STRING=\"sqlite\ 3.7.9\"改为-DPACKAGE_STRING=\"sqlite_3.7.9\",保存退出。
重新执行make指令,建议在make之前先make clean。
等一段时间后,make成功。
#make install完成之后可以发现,之前所建目录/opt/build下生成bin include lib share四个目录。主要用到的文件有./bin/sqlite3,./include/sqlite3.h以及./lib/下的库文件。
bin文件夹下的sqlite3,是sqlite可执行应用程序,下载到板子Linux系统下的/bin目录或者/usr/bin目录下,并添加文件可执行权限。在板子Linux系统命令行下执行:
[root@windaka bin]# chmod +x sqlite3
进入sqlite命令行,可以实现对数据库的管理。
[root@windaka usr]# sqlite3
SQLite version 3.7.9 2011-11-01 00:52:41
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
提示:要成功在arm开发板运行sqlite3,需要把./lib下的动态链接库下载到板子上。否则会有无法找到动态链接库libsqlite3.so.0的错误提示。
./include/sqlite3.h定义了sqlite的API接口,会在有关sqlite的c文件交叉编译时用到。
./lib/文件夹下是有关sqlite的静态链接库和动态链接库
# ls lib/
libsqlite3.a libsqlite3.la libsqlite3.so libsqlite3.so.0 libsqlite3.so.0.8.6 pkgconfig
libsqlite3.so和libsqlite3.so.0都是libsqlite3.so.0.8.6的软链接文件。真正需要下载到板子目录/lib下的动态库是libsqlite3.so.0.8.6。下载到板子后,还需对它建立软链接文件,因为可执行程序寻找的动态链接库的名字为libsqlite3.so.0。(或者直接把libsqlite3.so、libsqlite3.so.0、 libsqlite3.so.0.8.6 下载到开发板的 lib目录下)
[root@windaka plg]# ln -s /lib/libsqlite3.so.0.8.6 /lib/libsqlite3.so.0
测试数据库:
动态编译:
#arm-none-linux-gnueabi-gcc -o test test_sqlite.c -I /opt/build/include/ -L /opt/build/lib/ -lsqlite3
注:-I制定优先搜索头文件路径,-L制定编译的时候,优先搜索库的路径。
下载到板子上执行:
测试成功!
静态编译:
#arm-none-linux-gnueabi-gcc -o test test_sqlite.c -I /opt/build/include/ -L /opt/build/lib/ -static -lsqlite3
错误信息中提示有线程接口函数,需要线程的动态链接库,要加入-lpthread选项。在网上查找,按照网友提供的资料dlopen(),dlclose(),dlerror(),dlsym()函数在头文件#include <dlfcn.h>中,同样需要添加编译选项-ldl。
# arm-linux-gcc -o test test.c -I /opt/build/include/ -L /opt/build/lib -static -lsqlite3 -lpthread –ldl
编译成功,但有一个warning,没有解决,暂时没有发现这个警告对程序影响。
/opt/build/lib/libsqlite3.a(sqlite3.o): In function `unixDlOpen':
/opt/sqlite-autoconf-3070900/sqlite3.c:29885: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
静态编译与动态编译的差别在于,可执行文件较大,即使板子上没有移植动态链接库libsqlite3.so.0,程序也同样可以执行。