VC2005编译SQLite,生成WINCE上使用的DLL和Lib
2009-06-16 19:16
861 查看
选择创建一个“WIN32智能设备项目”;
应用程序类型选择:一个空的Dll;
将sqlite3.5.1的所有源码均加入工程(http://sourceforge.net/project/showfiles.php?group_id=88393 可以下载。最新的则要到官网去下载,一个是sqlitedll-3_6_15.zip,一个是sqlite-amalgamation-3_6_15.zip 。下载完之后,解压放到你的工程目录之下)。注意需要将tclsqlite.c和shell.c、icu.c去掉。其中tclsqlite.c用于生成基于tcl的api,如果要编译,这需要另外下 载tcl.h;shell.c用于生成命令行模式的sqlite.exe,如果是静态库形式则可以选择; icu是
internationalcomponents forunicode,如果需要则需另外下载相关头文件。
在源文件和头文件种,分别把*.c和*.h文件加入进来。
选中项目(而不是文件),项目->属性->C/C++->预编译头-> 创建/使用预编译头: 选择不使用预编译头。
选中项目(而不是文件),项目->属性->链接器->输入-> 模块定义文件: 输入“sqlite3.def”。
好,可以开始编译了,右击sqlite3,选择“生成”,结果链接出错,
—— 已启动生成: 项目: sqlite3, 配置: Release Win32 ——
正在编译…
sqlite3.c
正在链接…
sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_database_name
sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_database_name16
sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_origin_name
sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_origin_name16
sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_table_name
sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_table_name16
sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_table_column_metadata
看来sqlite3.def 中定义的这几个导出函数找不到定义,什么原因呢,经过一番google,找到这篇文章
,需要增加一个预定义宏 SQLITE_ENABLE_COLUMN_METADATA,这个宏是什么意思呢,到官网
去查一下,
SQLITE_ENABLE_COLUMN_METADATA
When this C-preprocessor macro is defined, SQLite includes some
additional APIs that provide convenient access to meta-data about
tables and queries. The APIs that are enabled by this option are:
* sqlite3_column_database_name()
* sqlite3_column_database_name16()
* sqlite3_column_table_name()
* sqlite3_column_table_name16()
* sqlite3_column_origin_name()
* sqlite3_column_origin_name16()
* sqlite3_table_column_metadata()
原来是只有当启用了这个宏后,c代码中才会后这几个函数的定义,OK,在预处理器中添加 SQLITE_ENABLE_COLUMN_METADATA,如下图所示。
再来编译,搞定!
应用程序类型选择:一个空的Dll;
将sqlite3.5.1的所有源码均加入工程(http://sourceforge.net/project/showfiles.php?group_id=88393 可以下载。最新的则要到官网去下载,一个是sqlitedll-3_6_15.zip,一个是sqlite-amalgamation-3_6_15.zip 。下载完之后,解压放到你的工程目录之下)。注意需要将tclsqlite.c和shell.c、icu.c去掉。其中tclsqlite.c用于生成基于tcl的api,如果要编译,这需要另外下 载tcl.h;shell.c用于生成命令行模式的sqlite.exe,如果是静态库形式则可以选择; icu是
internationalcomponents forunicode,如果需要则需另外下载相关头文件。
在源文件和头文件种,分别把*.c和*.h文件加入进来。
选中项目(而不是文件),项目->属性->C/C++->预编译头-> 创建/使用预编译头: 选择不使用预编译头。
选中项目(而不是文件),项目->属性->链接器->输入-> 模块定义文件: 输入“sqlite3.def”。
好,可以开始编译了,右击sqlite3,选择“生成”,结果链接出错,
—— 已启动生成: 项目: sqlite3, 配置: Release Win32 ——
正在编译…
sqlite3.c
正在链接…
sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_database_name
sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_database_name16
sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_origin_name
sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_origin_name16
sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_table_name
sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_table_name16
sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_table_column_metadata
看来sqlite3.def 中定义的这几个导出函数找不到定义,什么原因呢,经过一番google,找到这篇文章
,需要增加一个预定义宏 SQLITE_ENABLE_COLUMN_METADATA,这个宏是什么意思呢,到官网
去查一下,
SQLITE_ENABLE_COLUMN_METADATA
When this C-preprocessor macro is defined, SQLite includes some
additional APIs that provide convenient access to meta-data about
tables and queries. The APIs that are enabled by this option are:
* sqlite3_column_database_name()
* sqlite3_column_database_name16()
* sqlite3_column_table_name()
* sqlite3_column_table_name16()
* sqlite3_column_origin_name()
* sqlite3_column_origin_name16()
* sqlite3_table_column_metadata()
原来是只有当启用了这个宏后,c代码中才会后这几个函数的定义,OK,在预处理器中添加 SQLITE_ENABLE_COLUMN_METADATA,如下图所示。
再来编译,搞定!
相关文章推荐
- VC2005编译SQLite,生成WINCE上使用的DLL和Lib
- VC2005编译SQLite,生成WINCE上使用的DLL和Lib
- VC2005编译SQLite 生成WINCE上使用的DLL和Lib
- VC2005编译SQLite,生成WINCE上使用的DLL和Lib
- VC2005编译SQLite,生成WINCE上使用的DLL和Lib
- VC2005编译SQLite,生成WINCE上使用的DLL和Lib
- 将sqlite3编译成给WINCE使用的DLL,并封装成C++的步骤(使用VS2005)
- 将sqlite3编译成给WINCE使用的DLL,并封装成C++的步骤(使用VS2005)
- VC++编译错误: Nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12已经在dllmain.obj 中定义
- VC编译错误: Nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12已经在dllmain.obj 中定义
- ffmpeg编译(生成Windows Mobile或Wince平台dll, lib)
- 让vc编译的zlib生成的dll在BCB以静态链接的方式使用
- 由动态库文件dll生成lib库文件(手动生成.def文件,然后使用lib命令编译,非常牛),同理可使用dll生成.a库文件
- 编译2010年x264最新的代码供VC编译使用DLL与LIB
- VC6中使用VC2005编译的DLL问题
- VC6中使用VC2005编译的DLL问题
- VC2005使用SQLite,适用于WIN32以及WINCE
- VC编译错误: Nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12已经在dllmain.obj 中定义
- windows下的编译生成的R.dll 无R.lib 由dll生成lib的方法
- 调试: 编译错误, mfcs42.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in MSVCRT.lib(dllmai