• 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中前面插入一段导出代码

    例如:

    1 #pragma once
    2 
    3 #ifdef CSQLITE_DLL_FINAL2_EXPORTS
    4 #define SQLITE_API __declspec(dllexport)
    5 #else
    6 #define SQLITE_API __declspec(dllimport)
    7 #endif // !CSQLITE_DLL_FINAL2_EXPORTS

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

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

  • 相关阅读:
    P2617 Dynamic Rankings 动态主席树
    P4338 [ZJOI2018]历史 LCT+树形DP
    P3348 [ZJOI2016]大森林
    P3613 睡觉困难综合征 LCT+贪心+位运算
    SP16549 QTREE6
    P3703 [SDOI2017]树点涂色 LCT维护颜色+线段树维护dfs序+倍增LCA
    U19464 山村游历(Wander) LCT维护子树大小
    P4219 [BJOI2014]大融合 LCT维护子树大小
    P2542 [AHOI2005]航线规划 LCT维护双连通分量
    P3950 部落冲突
  • 原文地址:https://www.cnblogs.com/superstargg/p/4380787.html
Copyright © 2020-2023  润新知