【问题标题】:MSVC2017 Statically linking SQLite3MSVC2017 静态链接 SQLite3
【发布时间】:2017-12-08 06:11:57
【问题描述】:

我有一个 Microsoft Visual Code 2017 控制台应用程序,我想将它静态链接到 sqlite3。我已经链接了sqlite3.lib 文件并包含了sqlite3.h 文件。但是,当我执行程序时,它仍然会弹出缺少sqlite3.dll 的消息。我以为sqlite3会静态链接,我做错了什么?

编译没有错误

这是我的代码:

#include "stdafx.h"
#include "sqlite3.h"

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

static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
    int i;
    for(i=0; i<argc; i++) {
        printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
        }
    printf("\n");
    return 0;
    }
int main(int argc, _TCHAR* argv[]) {
    sqlite3 *db;
    char *zErrMsg = 0;
    int rc;

    rc = sqlite3_open("test.db", &db);
    if( rc ) {
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
        }
    rc = sqlite3_exec(db, "create table stuff ( name )", callback, 0, &zErrMsg);
    rc = sqlite3_exec(db, "insert into stuff values ('hello')", callback, 0, &zErrMsg);
    rc = sqlite3_exec(db, "select * from stuff", callback, 0, &zErrMsg);
    if(rc != SQLITE_OK) {
    fprintf(stderr, "SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
        }
    sqlite3_close(db);
    return 0;
    }

【问题讨论】:

  • 您将再次链接刚刚定义 DLL 入口点的“存根”库。您需要完整的 SQLite 静态构建库。你从哪里得到的官方网站的下载只有MS Windows sqlite.org/download.html的源代码和DLL?
  • 忠告——如果 SqlLite 没有预先提供静态库,那么您自己创建一个静态库需要您做的不仅仅是简单的构建。如果没有这样的预建库,作者很可能认为创建这样的库是不可能或任务太多的。必须更改定义,必须定义/未定义预处理器符号等。
  • @TVAvanHesteren -- 静态库必须使用与您正在使用的编译器完全相同的版本构建,使用与您正在使用的版本相同的运行时库等等。我高度怀疑,除非作者花费了过多的时间,为您构建了与您的编译器完美匹配的静态库。
  • 是的,如果作者允许分发,您必须分发 sqllite.dll。如果你真的想构建静态库,你需要获取所有的源代码,并获得作者关于如何构建库的指导和说明。除非您确切地知道自己在做什么,否则您不能独自完成这件事。
  • 我相信有一些实用程序可以打包 DLL,以便它们对您的应用程序用户“隐藏”(当您的应用程序运行时它们会展开)。也许你应该考虑使用类似的东西(虽然不知道它们的效果如何)。

标签: c++ visual-studio sqlite visual-studio-2017 static-linking


【解决方案1】:

您可以将sqlite3.c 文件与其他.c.cpp 文件一起包含。这是整个事情的一个大文件。然后静态链接,不处理.lib.dll文件。

【讨论】:

    猜你喜欢
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    相关资源
    最近更新 更多