前端之家收集整理的这篇文章主要介绍了
创建SQLite的DLL和LIB,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
502_0@
下载源码包两个:
@H_
502_0@
sqlite-dll-win32-x86-3081101.zip
,里面提供了导出sqlite3
的函数的文件sqlite3.def
@H_
502_0@
主要用于生成LIB
文件,确定链接使用
@H_
502_0@
sqlite-preprocessed-3081101.zip
,提供了源码文件,但是删除shell.c
和tcl
sqlite3.c
文件
@H_
502_0@1.
新建win32
控制台程序,名称sqlite3
@H_
502_0@2.
选择生成DLL
@H_
502_0@3.
解压压缩包,将sqlite-preprocessed-3081101
的文件复制到工程文件夹下(除了shell.c
以及tcl
sqlite.c)
。
@H_
502_0@4.
通过添加存在文件,将源码添加到编译项目中
@H_
502_0@5
设置模块定义文件sqlite3.def
,否则生成的dll
没有对应的lib
@H_
502_0@7.
添加预定义选项sqlITE_CORE,
sqlITE_ENABLE_COLUMN_
MetaDATA
、sqlITE_ENABLE_RTREE
,这是sqlite3
的宏定义。
@H_
502_0@8.
按F7
生成相应的dll
和lib
。
@H_
502_0@
编译小细节:
@H_
502_0@
指定函数的导出文件:sqlite3.defs
@H_
502_0@
属性》》链接器》》输入》》模块定义文件(sqlite3.def
),请注意这种情况下,sqlite3.def
文件和编译环境平级。
@H_
502_0@
后果:不会生成sqlite3.lib
文件
@H_
502_0@
指定预编译宏:
@H_
502_0@
属性》》C/C++
》》预处理器》》预处理定义》》
@H_
502_0@
sqlITE_CORE
@H_
502_0@
sqlITE_ENABLE_COLUMN_
MetaDATA
@H_
502_0@
sqlITE_ENABLE_RTREE
@H_
502_0@
后果:
@H_
502_0@
1>sqlite3.def : error LNK2001: 无法解析的外部符号sqlite3_column_database_name
@H_
502_0@
1>sqlite3.def :error LNK2001: 无法解析的外部符号sqlite3_column_database_name16
@H_
502_0@
1>sqlite3.def :error LNK2001: 无法解析的外部符号sqlite3_column_origin_name
@H_
502_0@
1>sqlite3.def :error LNK2001: 无法解析的外部符号sqlite3_column_origin_name16
@H_
502_0@
1>sqlite3.def :error LNK2001: 无法解析的外部符号sqlite3_column_table_name
@H_
502_0@
1>sqlite3.def :error LNK2001: 无法解析的外部符号sqlite3_column_table_name16
@H_
502_0@
1>sqlite3.def :error LNK2001: 无法解析的外部符号sqlite3_rtree_geometry_callback
@H_
502_0@
1>sqlite3.def :error LNK2001: 无法解析的外部符号sqlite3_rtree_query_callback
@H_
502_0@
前面6个函数,必须定义了sqlITE_ENABLE_COLUMN_
MetaDATA
才能够将函数导出,一般情况下,这些函数,我们可以直接在sqlite3.def
文件中删除,不导出
@H_
502_0@
后面2
个函数,必须定义了sqlITE_ENABLE_RTREE
才能够将函数导出,如果我们不适用R
树的空间搜索功能,这些函数,我们可以直接在sqlite3.def
文件中删除,不导出