csqlite是非常好用的数据库,同时该数据库是开源的,基于一定原因可能需要编译自己需要的csqlite版本,那么下面介绍内容也会你就会感兴趣了。

这里要实现的目标是使用VS工具能够正确编译csqlite源码文件生成csqlite的动态库文件。

准备:

csqlite源码文件:

sqlite-amalgamation-3080803.zip

sqlite-dll-win32-x86-3080803.zip

*注:这里我在官方网站下载了2个压缩包,为什么呢以为里面的5个文件都需要使用(shell.c/sqlite3.c/sqlite3.h/sqlite3ext.h/sqlite3.def)。

编译工具:

VS2013 UPDATE 4

环境配置:

1.启动VS2013创建win32的空的dll工程

2.添加现有项:shell.c/sqlite3.c/sqlite3.h/sqlite3ext.h/sqlite3.def

3.设置项目属性:

    1)生成动态库dll(这是默认的),字符集选择多字节的

    2)C/C++选项: 预处理定义:SQLITE_ENABLE_COLUMN_METADATA/SQLITE_ENABLE_RTREE(为什么呢?后面将)

    3)连接器选项:输入:模块定义文件:sqlite3.def

*注:SQLITE_ENABLE_COLUMN_METADATA 对应def文件中导出的函数

sqlite3_column_database_name
sqlite3_column_database_name16

sqlite3_column_origin_name
sqlite3_column_origin_name16
sqlite3_column_table_name
sqlite3_column_table_name16

SQLITE_ENABLE_RTREE对应def文件导出的函数

sqlite3_rtree_geometry_callback
sqlite3_rtree_query_callback

如果不设置这两个宏的话不会直接编译通过,会提示类似:“1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_rtree_geometry_callback”

编译:如果以上设置无误的话直接编译就会通过,并且生成lib文件和dll文件

==========================================================

在介绍一种快速生成lib文件的方法(适用于存在def文件的情况)

官方下载:sqlite-dll-win32-x86-3080803.zip

这个压缩包里面只有def文件和dll文件,要想正常使用怎么办呢?

答:使用VS2013自带的命令提示行工具,输入命令:LIB /DEF:def文件路径,这样就会生成默认的lib文件

=======================================================================

破坏式编译csqlite源文件

具体就是在sqlite3.h和sqlite3.cpp中前面插入一段导出代码

例如:

 #pragma once

 #ifdef CSQLITE_DLL_FINAL2_EXPORTS
#define SQLITE_API __declspec(dllexport)
#else
#define SQLITE_API __declspec(dllimport)
#endif // !CSQLITE_DLL_FINAL2_EXPORTS

这样就可以达到导出csqlite库的目的。但是这种方法会破坏原始的csqlite文件所以不推荐。

具体可操作的方法是在创建csqlite库工程时,除了添加sqlite3.h和sqlite3.cpp,还要创建添加一个头文件,头文件里面放上面代码,这样,在sqlite3.h和sqlite3.cpp前面进行头文件引用就可以正常导出了。

csqlite编译相关配置问题的更多相关文章

  1. #ifdef预编译相关用法

    #ifdef预编译相关用法主要有:(1)#ifdef XXX executing the corresponding xxx code #endif(2)#ifdef XXX executing th ...

  2. linux编译相关命令

    一.编译可执行文件 g++ –c Hello.cpp  编译文件,生成目标文件Hello.o g++ Hello.o –o a.out  链接并重命名为可执行文件a.out g++ Hello.cc  ...

  3. fuse3 编译相关简要记录 与 fuse3 系统调优;

    下面是在使用fuse3 编译bbfs 过程中一些参数,用于备忘: FUSE_CFLAGS="-I/usr/local/include/fuse3" FUSE_LIBS=" ...

  4. linux内核编译相关

    参考:http://www.arm.linux.org.uk/docs/kerncomp.php 一. 内核编译1) linux 2.4make clean/make mrpropermake dep ...

  5. java编译相关问题总结

    参考:http://jingyan.baidu.com/article/5bbb5a1b080f6113eba179f0.html 1.在linux下生成的class文件/jar包,拿到windows ...

  6. [flask实践] 解决qq邮箱/mysql的相关配置问题

    笔者经过flask web(Miguel著,封面是一条狗)一书的学习,打算实现一个旅游类网站,在此过程中发现,相对于书中的flasky博客程序,需要作出一些改变: 1. 注册邮箱:国内要使用126,q ...

  7. gcc编译相关tips

    http://blog.csdn.net/benpaobagzb/article/details/51364005 静态库链接时搜索路径顺序: ld会去找GCC命令中的参数-L 再找gcc的环境变量L ...

  8. VC工程编译相关

    ①error C4996: 'sprintf': This function or variable may be unsafe 这不是语法的错误,而是IDE默认禁止这种容易产生漏洞的旧函数,解决的方 ...

  9. Sqlserver2008相关配置问题

    一:ReportServices  无法连接Report Services 数据库服务 SSRS连接不了ReportServer (安装数据库的时候默认安装的一个报表服务数据库) 原因:装系统之后改了 ...

随机推荐

  1. 局域网接入Internet

    说在前面的话 局域网接入Internet的方式多样: 有1传统的Modem(调制解调器)拨号接入,费用低廉的2 ISDN和 3 ADSL接入,费用较高的4 DDN专线接入,5 Cable Modem高 ...

  2. Scala的安装(本地)

    前言 Scala版本的选法: 目前,Kafka库和JDBC并不支持Scala2.11的编译,以及结合大多数人的使用请来看.      scala2.10.*为主,在这,scala2.10.4版本,强烈 ...

  3. mongdb高级操作(group by )

    首先介绍哈方法 /** * 利用java驱动自带函数分组查询 * @param key 用来分组文档的字段 [group by key] * @param cond 执行过滤的条件 [where na ...

  4. (翻译)什么是Java的永久代(PermGen)内存泄漏

    http://www.codelast.com/?p=7248 转载请注明出处:http://www.codelast.com/ 本文是我对这篇文章的翻译:What is a PermGen leak ...

  5. 关于angular的ng-class条件判断

    angular的ng-class的多条件判断是非常好用的,不需要写过多的判断去更改他相应的class, 但大家要记住,在repeat中使用ng-class多条件判断时, 错误写法:<i clas ...

  6. 删除已分配IP的静态IP地址池

    如果静态IP地址池已经分配了IP,则无法直接将其静态IP地址池删除,会提示出错:“已经有IP被分配,需要先将其回收,再删除” 如下: 查看IP地址池: Get-SCStaticIPAddressPoo ...

  7. java带图片的邮件发送方法实现

    package sendEmail; import java.util.Properties; import javax.activation.DataHandler; import javax.ac ...

  8. 雄踞AppStore榜首的游戏&lt;别踩到白块儿&gt;源码分析和下载(一)

    AppStore和Android市场情况 莫名其妙爆红的游戏 真的莫名其妙,笔者下这个游戏两次.第一次在豌豆荚排行榜看到这款游戏,名字怪怪的,下载下来尝试一下,没认为有什么新颖的,还在思虑这是不是刷榜 ...

  9. JavaScript【5】高级特性(作用域、闭包、对象)

    笔记来自<Node.js开发指南>BYVoid编著 1.作用域 if (true) { var somevar = 'value'; } console.log(somevar); Jav ...

  10. Java中各种排序算法

    package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; /** * @author treero ...