SQLite第三课 创建windows动态库

下载源码包两个:
sqlite-dll-win32-x86-3081101.zip,里面提供了导出sqlite3的函数的文件sqlite3.def
主要用于生成LIB文件,确定链接使用
sqlite-preprocessed-3081101.zip,提供了源码文件,但是删除shell.c和tclsqlite3.c文件
 
1.新建win32控制台程序,名称sqlite3
 
2.选择生成DLL
 
3.解压压缩包,将sqlite-preprocessed-3081101的文件复制到工程文件夹下(除了shell.c以及tclsqlite.c)。
 
4.通过添加存在文件,将源码添加到编译项目中
 
 
5设置模块定义文件sqlite3.def,否则生成的dll没有对应的lib
 
 
7.添加预定义选项SQLITE_CORE,SQLITE_ENABLE_COLUMN_METADATA、SQLITE_ENABLE_RTREE,这是sqlite3的宏定义。
 
8.按F7生成相应的dll和lib。
 
编译小细节:
 
指定函数的导出文件:sqlite3.defs
属性>>链接器>>输入>>模块定义文件(sqlite3.def),请注意这种情况下,sqlite3.def文件和编译环境平级。
后果:不会生成sqlite3.lib文件
指定预编译宏:
属性>>C/C++>>预处理器>>预处理定义>>

SQLITE_CORE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_RTREE
编译出错提示:
1>sqlite3.def : error LNK2001: 无法解析的外部符号sqlite3_column_database_name
1>sqlite3.def :error LNK2001: 无法解析的外部符号sqlite3_column_database_name16
1>sqlite3.def :error LNK2001: 无法解析的外部符号sqlite3_column_origin_name
1>sqlite3.def :error LNK2001: 无法解析的外部符号sqlite3_column_origin_name16
1>sqlite3.def :error LNK2001: 无法解析的外部符号sqlite3_column_table_name
1>sqlite3.def :error LNK2001: 无法解析的外部符号sqlite3_column_table_name16
1>sqlite3.def :error LNK2001: 无法解析的外部符号sqlite3_rtree_geometry_callback
1>sqlite3.def :error LNK2001: 无法解析的外部符号sqlite3_rtree_query_callback
前面6个函数,必须定义了SQLITE_ENABLE_COLUMN_METADATA才能够将函数导出,一般情况下,这些函数,我们可以直接在sqlite3.def文件中删除,不导出
后面2个函数,必须定义了SQLITE_ENABLE_RTREE才能够将函数导出,如果我们不适用R树的空间搜索功能,这些函数,我们可以直接在sqlite3.def文件中删除,不导出

猜你喜欢

转载自blog.51cto.com/fengyuzaitu/2430046