csqlite编译相关配置问题
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编译相关配置问题的更多相关文章
- #ifdef预编译相关用法
#ifdef预编译相关用法主要有:(1)#ifdef XXX executing the corresponding xxx code #endif(2)#ifdef XXX executing th ...
- linux编译相关命令
一.编译可执行文件 g++ –c Hello.cpp 编译文件,生成目标文件Hello.o g++ Hello.o –o a.out 链接并重命名为可执行文件a.out g++ Hello.cc ...
- fuse3 编译相关简要记录 与 fuse3 系统调优;
下面是在使用fuse3 编译bbfs 过程中一些参数,用于备忘: FUSE_CFLAGS="-I/usr/local/include/fuse3" FUSE_LIBS=" ...
- linux内核编译相关
参考:http://www.arm.linux.org.uk/docs/kerncomp.php 一. 内核编译1) linux 2.4make clean/make mrpropermake dep ...
- java编译相关问题总结
参考:http://jingyan.baidu.com/article/5bbb5a1b080f6113eba179f0.html 1.在linux下生成的class文件/jar包,拿到windows ...
- [flask实践] 解决qq邮箱/mysql的相关配置问题
笔者经过flask web(Miguel著,封面是一条狗)一书的学习,打算实现一个旅游类网站,在此过程中发现,相对于书中的flasky博客程序,需要作出一些改变: 1. 注册邮箱:国内要使用126,q ...
- gcc编译相关tips
http://blog.csdn.net/benpaobagzb/article/details/51364005 静态库链接时搜索路径顺序: ld会去找GCC命令中的参数-L 再找gcc的环境变量L ...
- VC工程编译相关
①error C4996: 'sprintf': This function or variable may be unsafe 这不是语法的错误,而是IDE默认禁止这种容易产生漏洞的旧函数,解决的方 ...
- Sqlserver2008相关配置问题
一:ReportServices 无法连接Report Services 数据库服务 SSRS连接不了ReportServer (安装数据库的时候默认安装的一个报表服务数据库) 原因:装系统之后改了 ...
随机推荐
- POJ-2296 Map Labeler 2sat
题目链接:http://poj.org/problem?id=2296 二分+2sat,每个点的上下两个方向为2sat的两个状态. //STATUS:C++_AC_16MS_536KB #includ ...
- 让SecureCRT vi中显示多色彩
方法1: 1.打开SecureCRT___选项__会话选项___仿真 右边的中端选择linux,把ANSI 颜色和使用颜色方案打上钩. 2.选择外观,右边的使用颜色和闪烁都打上钩. 3.重新连接使所该 ...
- A Tour of Go Numeric Constants
Numeric constants are high-precision values. An untyped constant takes the type needed by its contex ...
- java利用Google Zxing实现 二维码生成与解析
1.引入zxing 2.使用下面两个类:QRCodeUtil.java和BufferedImageLuminanceSource.java 3.新建单元测试类 复制下面测试代码即可. 1.pom文件中 ...
- 2016-11-15NOIP模拟赛
AM学军OJ T1 暴力 #include<bits/stdc++.h> using namespace std; typedef long long LL; + ; int len, p ...
- Unity4向上(Unity5)兼容PlayerPrefs的数据存储
好久没有写项目.开发相关的内容了,刚好最近在做项目的更新时,遇到一个比较有意思的坑就随手记录一下. 因为项目的上一上线版本是由Unity5.3发的包,而最新的项目来不及同步更新到5.3版本发包测试,所 ...
- python学习(3)
Python学习(3)切片(Slice):根据索引范围取出字符串里面的内容,比如: l=range(100) l[:8] [0, 1, 2, 3, 4, 5, 6, 7] ...
- Apache CXF框架结构和基本原理(转)
原文链接:http://blog.sina.com.cn/s/blog_6182547f01017pak.html CXF旨在为服务创建必要的基础设施,它的整体架构主要由以下几个部分组成: 1.Bus ...
- ASP.NET用HttpListener实现文件断点续传
本文转载:http://www.cnblogs.com/TianFang/archive/2007/01/03/610739.html 断点续传的原理很简单,就是在Http的请求和应答的报文头上和一般 ...
- C++ Primer--虚函数与纯虚函数的区别
首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数. 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实 ...