`
soulmachine
  • 浏览: 109808 次
  • 性别: Icon_minigender_1
  • 来自: 湖北武汉
社区版块
存档分类
最新评论

在Visual Studio 下编译 sqlite3

阅读更多

首先,sqlite 官方已经有预编译好的DLL下载,如果你不需要特别优化的版本,直接下载官网上的DLL即可。你可以在下载 页面的 “Precompiled Binaries For Windows” 可以找到。
不过你想编译出自己的版本,比如添加优化参数后编译,debug版,或进行一些定制(例如官网这里 有一些预编译宏,允许你定制自己的sqlite),那么你就需要自己编译了。

首先在下载源代码,在页面的第一行就是,如 sqlite-amalgamation-3_6_12.zip ,接着下载编译好的DLL,我们主要是需要这里面的一个 sqlite3.def 文件,因为源代码里没有。一般下拉到 “Precompiled Binaries For Windows” 就可以看到,例如 sqlitedll-3_6_12.zip 。有了这两个压缩包就可以了。

首 先解压 sqlite-amalgamation-3_6_12.zip 到文件夹 sqlite3/,会得到 sqlite3.c,sqlite3.h,sqlite3ext.h 三个文件,然后解压 sqlitedll-3_6_12.zip ,把 sqlite3.def 移动到 sqlite3/ 下面。

打开 visual studio,新建一个空的dll工程,工程名为sqlite3,这样是为了能直接生成名为sqlite3.dll 的dll。然后sqlite3/ 下的4个文件文件夹移动到此工程目录下,即与 sqlite3.vcproj 在同一级。
将 sqlite3.c 添加到工程,具体做法是右击“源文件”,选择“添加->现有项”,浏览到sqlite3.c即可。如下图所示。

undefined


然后将sqlite3.def 添加到工程,然后输入给连接器。具体做法是右击工程sqlite3,选择“属性”,在弹出的对话框中选择“连接器->输入”,在“模块定义文件”中输入sqlite3.def,如下图所示。

undefined

好,可以开始编译了,右击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,如下图所示。

undefined

再来编译,搞定!

查看原文

分享到:
评论

相关推荐

    sqlite3在Visual studio 2012下的编译

    Visual studio 2012 下 sqlite3的工程文件,生成32或64位的sqlite3库 This page explains how to compile SQLite with Microsoft Visual Studio.NET (aka VS.NET). Download Download and unzip the file sqlite_...

    SQLite编译

    SQLite源码编译,使用visual studio 2008 windows windowsce

    vs2003编译通过的sqlite3.6.12源码

    本代码是基于windows下在visual studio 2003上编译过的;sqlite的版本为3.6.12。包含整个项目。

    VS2010下C++连接SQLite3

    SQLite并没有一次性做到位,只有下载这些东西是不能放在vs2010中并马上使用的,下载下来的文件中有sqlite3.c/h/dll/def,还是...就能生成sqlite3.exp和sqlite3.lib文件了,这样在工程中就可以加入lib文件进行编译了。

    sqlite3.a sqlite3.def sqlite3.h sqlite3.dll库文件 最新版

    gcc使用的sqlite3数据库,sqlite3.a ,可以用于Dev-C++,也可以用于Windows下使用gcc编译的程序,sqlite版本是:3270200,还包含了sqlite3.lib库文件,可以用于visual studio。

    VC工程演示对sqlite数据库的操作,包含SQLite3文件!

    将sqlite3.h(D:\sqlite-amalgamation-3_6_23.zip)拷贝到C:\Program Files\Microsoft Visual Studio\VC98\Include目录下,这时编译可通过,但链接错误,因为没有LIB文件() 2.启动一个命令行程序,进入VC的安装...

    SQLite3与CC++的结合应用

    SQLite并没有一次性做到位,只有下载这些东西是不能放在vs2010中并马上使用的,下载下来的文件中有sqlite3.c/h/dll/def,还是...就能生成sqlite3.exp和sqlite3.lib文件了,这样在工程中就可以加入lib文件进行编译了。

    vs2015编译freeswitch

    win7 64位下用vs2015编译freeswitch,缺少的源码。有curl-7.35.0,jpegsr8d,libpng-1.6.29,pcre-8.34,speex-1.2rc1,sqlite-amalgamation-3190300,tiff-4.0.7,zlib-1.2.11

    sqlcipher-visual-studio:准备好的 Visual Studio 2013 解决方案,包括编译 sqlcipher 的所有内容

    用于 Visual Studio 的 SQLCipher,构建平台 x32 和 x64 是 Visual Studio 2013 的开源库 [ ] 的一个简单端口。一切都应该开箱即用,以编译 x32 和 x64 版本的 sqlcipher。 版本 sqlcipher-visual-studio是 并已...

    Visual C++访问SQLite

    实用Visual Studio 2010开发环境,可以重新编译运行

    sqlite32位与64位 h,lib,dll

    2.sqlite3.7.5以前的sqlite_amalgamation包内包括shell.c,sqlite3.c,sqlite3.def,sqlite3.h,sqlite3ext.h五个文件,可在VS环境下编译生成sqlite3.lib和sqlite3.dll,具体编译设置过程参看网上文献:...

    Sqlite3.8.8加密封装

    visual studio 2013下成功编译Sqlite3.8.8加密封装完整包,包括sqlite和支持库全部源码。

    【实测有效,真正解决】VB.NET C# VS sqlite 无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块

    简单整合32位SQLite跟64位SQLite,项目属性设置为anycpu的时候不会再有烦人的编译平台不同的提示,sqlite会自动根据系统的位数,而选择相应的版本。 同时还阔以解决System.DllNotFoundException: 无法加载 DLL...

    Sqlite3.25 完整使用示例(纯C代码)

    SQLite 3.25 完整使用示例 DEMO 演示(纯C代码); 请用Visual Studio 2015编译; 内含SQLite 3.25 DLL,头文件 和 链接用的 LIB文件(sqlite3.lib 61KB), 采用动态链接方式使用官方DLL。

    SQlite数据库修复工具(C#开发工程,含sqlite安装包)

    sqlite当多线程操作时,会有一定概率损坏;此工具可以修复数据库,把有问题的记录自动修复或移除。用Visual Studio2019开发,内含sqlite3安装包,可以直接查看代码,也可以直接使用编译好的文件测试。

    DevExpress源码编译时所需要的几个dll

    Mono.Security.dll,MySql.Data.dll,Npgsql.dll,nunit.framework.dll,Oracle.DataAccess.dll,Pervasive.Data.SqlClient.dll,System.Data.SQLite.DLL,VistaDB.NET20.dll,Microsoft.VisualStudio.Debugger...

    gdal-3.5.2库编译结果以及依赖库文件和使用手册文档

    编译环境:详情可参考“Visual Studio 2019 (vs2019) C++ 环境配置GDAL” GDAL-3.8.2,PROJ-9.1.0,SQLite-3.44.2,tiff-4.6.0,curl-8.4.0_6-x86以及跨平台编译工具CMake-3.28.0。 本资源仅包括gdal3.5.2资源以及...

    DevExpress 11.1.8编译所需第三方dll,最后一个支持2.0版本

    Microsoft.VisualStudio.DebuggerVisualizers.dll Mono.Security.dll Moq.dll Moq.Silverlight.dll MySql.Data.dll Npgsql.dll nunit.framework.dll Oracle.DataAccess.dll Pervasive.Data.SqlClient.dll System....

    ZvLibs 0.0.0.69

    * c++ 类可扩展,继承 CHttpHandle,很容易实现动态页面。 * 支持 multipart/form-data 格式的表单上传文件。 * 使用map, string> 存放表单、URL 参数等。... * 内有demo程序,在visual studio 2008 下编译通过。

    Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法

    调试原来的工程,由于在其中引用了“SQLite”的32位的dll,导致在64为位下程序无法运行(但是编译可以通过) 后来通过修改工程文件(.csproj),在其中设置引用的条件,解决了问题 打开引用了SQLite的工程(例如叫做...

Global site tag (gtag.js) - Google Analytics