VS2017编译SQLite3生成.lib

sqlite3.dll动态链接库,允许程序共享执行特殊任务所必需的代码和其他资源。

动态的sqlite3.lib相当于一个.h文件,是对实现部分(.dll文件)的导出部分的声明。编译后只是将导出声明部分编译到宿主程序中,其生成的sqlite3.exe在运行时需要相应的.dll文件支持。

静态的sqlite3.lib将导出声明和实现都放在.lib中,编译后所有代码都嵌入到宿主程序,其生成的sqlite3.exe可直接运行。

以编译生成x64位的为例。下载文件:https://www.sqlite.org/download.html

sqlite-amalgamation-3280000.zip (包含文件:shell.c, sqlite3.c, sqlite3.h, sqlite3ext.h),

sqlite-dll-win64-x64-3280000.zip (包含文件:sqlite3.def, sqlite3.dll)

需要使用VS2017的lib.exe,在D:\Program Files\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64\目录下,

复制整个文件夹到新的目录(如:桌面),

VS2017编译SQLite3生成.lib_第1张图片

方案一:编译生成动态sqlite3.lib

sqlite3.def = lib.exe => dynamic sqlite3.lib = solution => SQLite3-dynamic_lib.exe + sqlite3.dll

1. 将sqlite3.def复制到新的目录下(如:C:\Users\Snow-Angel\Desktop\x64),

进入cmd输入:LIB /DEF:sqlite3.def /MACHINE:X64,生成需要的动态sqlite3.lib文件。

VS2017编译SQLite3生成.lib_第2张图片

2. 新建空项目测试:SQLite3-dynamic_lib,

添加sqlite3.h, sqlite3.dll和生成的sqlite3.lib到项目目录下

VS2017编译SQLite3生成.lib_第3张图片

3. 包含头文件:#include “sqlite3.h”

预编译lib文件:

方式1. #pragma comment(lib, "sqlite3.lib")

方式2. 在项目上 右键 | 添加 | 现有项…,选择sqlite3.lib,自动添加到资源文件中

VS2017编译SQLite3生成.lib_第4张图片

4. 项目属性 | 配置属性 |

常规 | 字符集:使用Unicode字符集,C/C++ | 代码生成 | 运行库:多线程(/MT)

设置为Release x64,编译运行。

VS2017编译SQLite3生成.lib_第5张图片

VS2017编译SQLite3生成.lib_第6张图片

VS2017编译SQLite3生成.lib_第7张图片

5. 测试代码:

#include

#include "sqlite3.h"

 

#pragma comment(lib, "sqlite3.lib")

 

using namespace std;

 

int main(int argc, char* argv[])

{

    sqlite3* db;

    int res = sqlite3_open("test.db", &db);

    if (SQLITE_OK == res)

    {

        cout << "Open database succeed." << endl;

    }

    else

    {

        cout << "Can't open database: " << sqlite3_errmsg(db) << endl;

        exit(1);

    }

 

    const char* sql = "CREATE TABLE company("  \

        "id INT PRIMARY KEY     NOT NULL, " \

        "name           TEXT    NOT NULL, " \

        "age            INT     NOT NULL, " \

        "address        CHAR(50), " \

        "salary         REAL );";

 

    // Execute SQL statement

    char* errmsg = nullptr;

    res = sqlite3_exec(db, sql, 0, 0, &errmsg);

    if (SQLITE_OK == res)

    {

        cout << "Create table succeed.\n" << endl;

    }

    else

    {

        cout << "SQL error: " << errmsg << endl;

        sqlite3_free(errmsg);

    }

 

    sqlite3_close(db);

 

    system("pause");

    return 0;

}

 

方案二:编译生成静态sqlite3.lib

sqlite3.c, sqlite3.h, sqlte3ext.h = solution_obj / dll=> sqlite3.obj = LIB sqlite3.obj =>

static sqlite3.lib => = solution => SQLite3-static_lib.exe

1. 新建空项目SQLite3-obj,添加文件sqlite3.c, sqlite3.h, sqlte3ext.h到项目目录下,

配置类型为动态库(.dll),生成 Release x64

在路径

C:\Users\Snow-Angel\Desktop\SQLite3-obj\SQLite3-obj\x64\Release下会生成sqlite3.obj文件

 

 

VS2017编译SQLite3生成.lib_第8张图片

VS2017编译SQLite3生成.lib_第9张图片

2. 复制sqlite3.obj到复制的目录C:\Users\Snow-Angel\Desktop\x64下,

进入cmd输入:LIB sqlite3.obj,生成静态的sqlite3.lib。

(其实是将.c .h等文件编译后的目标文件.obj用lib.exe重新生成链接库文件.lib)

VS2017编译SQLite3生成.lib_第10张图片

3. 新建空项目测试:SQLite3-static_lib

添加sqlite3.h, sqlite3.dll和生成的sqlite3.lib到项目目录下,同上。

VS2017编译SQLite3生成.lib_第11张图片

 

你可能感兴趣的:(开发环境)