ubuntu编译安装sqlite库
2016-03-01 22:59
274 查看
编译安装sqlite库
1、环境
ubuntu14.04 x642、sqlite数据库的优势
sqlite属于轻量级的数据库,特别适用于嵌入式设备,部署方便操作简单。3、sqlite代码获取
https://www.sqlite.org/2016/sqlite-autoconf-3110000.tar.gz4、代码编译
mkdir sqlitetar zxvf sqlite-autoconf-3110000.tar.gz -C sqlite
cd sqlite/sqlite-autoconf-3110000
./configure –prefix=/home/andy/test #–prefix用于指定sqlite库文件、头文件和可行性命令的安装路径
- make #进行编译
- make install #把sqlite安装到–prefix指定的目录下
- 顺利执行后,在/home/andy/test 目录下会出现四个文件夹
- bin #存放sqlite命令文件
- include #存放sqlite的头文件
- lib #存放sqlite库文件,包括静态库和动态库
- share #存放帮助文件等辅助性的文档
5、移植
如果是相同的平台,可以把上述test目录下的四个文件夹拷贝到目标系统中,具体的做法为:- 将bin目录下的文件拷贝到 /usr/local/bin
- 将lib目录下的文件拷贝到 /usr/local/lib 拷贝过程需要特别注意软连接
- include –> /usr/local/include
- share –> /usr/local/share
6、编译测试代码
下面代码就是在当前目录创建一个名为test.sq3的数据库文件#include <stdio.h> #include <sqlite3.h> int main(int argc, char *argv[]) { sqlite3 *handle = NULL; int iret = 0; iret = sqlite3_open("test.sq3", &handle); if (iret != SQLITE_OK) { printf("sqlite3_open error, reason = %s\n", sqlite3_errmsg(handle)); return 0; } if(handle != NULL) { (void)sqlite3_close(handle); } return 0; }
gcc -o test test.c -lsqlite3 #默认链接动态库
gcc -o test test.c -static -lsqlite3 -lpthread -ldl #指定链接动态库
7、链接静态库编译问题
刚开始直接使用gcc -o test test.c -static -lsqlite3 编译报如下错误:/home/andy/code/sqlite/sqlite-autoconf-3110000/sqlite3.c:21116:对‘pthread_mutex_trylock’未定义的引用
./lib//libsqlite3.a(sqlite3.o):在函数‘sqlite3ThreadCreate’中:
/home/andy/code/sqlite/sqlite-autoconf-3110000/sqlite3.c:24506:对‘pthread_create’未定义的引用
./lib//libsqlite3.a(sqlite3.o):在函数‘pthreadMutexFree’中:
/home/andy/code/sqlite/sqlite-autoconf-3110000/sqlite3.c:21021:对‘pthread_mutex_destroy’未定义的引用
./lib//libsqlite3.a(sqlite3.o):在函数‘pthreadMutexAlloc’中:
/home/andy/code/sqlite/sqlite-autoconf-3110000/sqlite3.c:20977:对‘pthread_mutexattr_init’未定义的引用
/home/andy/code/sqlite/sqlite-autoconf-3110000/sqlite3.c:20978:对‘pthread_mutexattr_settype’未定义的引用
/home/andy/code/sqlite/sqlite-autoconf-3110000/sqlite3.c:20979:对‘pthread_mutex_init’未定义的引用
/home/andy/code/sqlite/sqlite-autoconf-3110000/sqlite3.c:20980:对‘pthread_mutexattr_destroy’未定义的引用
/home/andy/code/sqlite/sqlite-autoconf-3110000/sqlite3.c:20988:对‘pthread_mutex_init’未定义的引用
./lib//libsqlite3.a(sqlite3.o):在函数‘sqlite3ThreadJoin’中:
/home/andy/code/sqlite/sqlite-autoconf-3110000/sqlite3.c:24526:对‘pthread_join’未定义的引用
./lib//libsqlite3.a(sqlite3.o):在函数‘unixDlError’中:
/home/andy/code/sqlite/sqlite-autoconf-3110000/sqlite3.c:33375:对‘dlerror’未定义的引用
./lib//libsqlite3.a(sqlite3.o):在函数‘pthreadMutexLeave’中:
/home/andy/code/sqlite/sqlite-autoconf-3110000/sqlite3.c:21154:对‘pthread_mutex_unlock’未定义的引用
./lib//libsqlite3.a(sqlite3.o):在函数‘pthreadMutexEnter’中:
/home/andy/code/sqlite/sqlite-autoconf-3110000/sqlite3.c:21070:对‘pthread_mutex_lock’未定义的引用
./lib//libsqlite3.a(sqlite3.o):在函数‘unixDlClose’中:
/home/andy/code/sqlite/sqlite-autoconf-3110000/sqlite3.c:33406:对‘dlclose’未定义的引用
./lib//libsqlite3.a(sqlite3.o):在函数‘unixDlSym’中:
/home/andy/code/sqlite/sqlite-autoconf-3110000/sqlite3.c:33402:对‘dlsym’未定义的引用
./lib//libsqlite3.a(sqlite3.o):在函数‘unixDlOpen’中:
说明sqlite库中还是通过动态加载的方式引用了pthread库和dl库。
改为gcc -o test test.c -static -lsqlite3 -lpthread -ldl 编译能成功,但是会有如下报警:
./lib//libsqlite3.a(sqlite3.o):在函数‘unixDlOpen’中:
/home/andy/code/sqlite/sqlite-autoconf-3110000/sqlite3.c:33361: 警告: Using ‘dlopen’ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
提示编译环境和运行环境的libc版本必须一直。
相关文章推荐
- Mac~Mysql
- 【转】oracle 针对中文字段进行排序
- 战五渣系列之七(索引那点事)
- 打开和关闭mysql服务的两种方法
- 常见Oracle HINT的用法
- Mysql传送门
- oracle sql 语句优化
- SQLite3的面向对象封装FMDB
- MySQLl导入数据出现--unknown command '\'
- sql语句中in后面的数据过多报错,或效率低
- mysql 常见错误:Can't create table... errno150原因分析
- Mac的MySQL无法启动的原因
- 安装SQL Server 2014
- MongoDB的安装(Linux平台)
- MySQL常用的命令添加用户、授权、及删除用户
- Mysql命令create table:创建数据表
- SQL SERVER 2008 存储过程传表参数
- MySQL报错 Errcode:28
- Oracle ADF 新手教程(一) JDeveloper IDE
- Oracle 归档模式的打开及关闭