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. 伪分布配置完成启动jobtracker和tasktracker没有启动

    检查logs目录下的hadoop-root-jobtracker日志文件 2014-02-26 19:56:06,782 FATAL org.apache.hadoop.mapred.JobTrack ...

  2. POJ2192 - Zipper(区间DP)

    题目大意 给定三个字符串s1,s2,s3,判断由s1和s2的字符能否组成字符串s3,并且要求组合后的字符串必须是s1,s2中原来的顺序. 题解 用dp[i][j]表示s1的前i个字符和s2的前j个字符 ...

  3. CodeForces 540E - Gerald and Giant Chess(数论)

    给一个棋盘,需要从左上角走到右下角,有部分点不能走,求一共有多少种走法. 首先要知道从一个点A到另一个点B在没有障碍下有多少种走法.保证A在B的左上方,如图 一共需要走(X+Y)步(图中△x,△y), ...

  4. c语言 字符版 简易2048

    花了两个多小时,用最蠢的方法写的……最简陋版…… 还不确定这么写逻辑对不对…… #include <iostream> #include <cstdio> #include & ...

  5. 北京Uber优步司机奖励政策(2月3日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. AJAX中的dataType(数据格式)-text、json

    因为经常使用数据格式,所以将它封装成类,J这样就不会用到时就写了,直接调用写好的类就可以了 (1)dataType数据格式为:TEXT格式的数据是字符串的数据,在"ajax对数据进行删除和查 ...

  7. Mysql常见问题及优化

    本文将就以下三个问题进行展开: 1.库表设计 2.慢 SQL 问题 3.误操作.程序 bug 时怎么办 一.库表设计 1.1 引擎选择 在 mysql 5.1 中,引入了新的插件式存储引擎体系结构,允 ...

  8. 版本控制Subversion TortoiseSVN apache VisualSVN笔记(转载)

    转载于http://blog.sina.com.cn/s/blog_6b94d5680101m7ah.html Subversion(简称svn)是近年来崛起的版本管理软件,是cvs的接班人.目前,绝 ...

  9. java中通过反射获取方法并且调用(getMethod和invoke深入)实践

    为了支持业务的快速变更,往往采用可配置的方式,将业务逻辑的处理部分配置在数据库中或者XMl文件里.配置什么,如何配置才更灵活,That's a problem. 以数据库配置为例(xml相同),在数据 ...

  10. 1514:数值的整数次方 @jobdu

    题目1514:数值的整数次方 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:377 解决:103 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent. ...