c - sqlite Visual Studio 2015

标签 c visual-studio sqlite visual-studio-2015

我正在尝试使用 sqlite 和 visual studio 制作一个程序。我已将 sqlite3.def、sqlite3.c、sqlite3.h、sqlite3.dll 文件添加到项目目录。我还在项目设置中添加了 THREADSAFESQLITE_ENABLE_COLUMN_METADATALinker -> Input -> Module definition file 中的预处理器定义和 sqlite3.def >。我正在尝试编译以下程序

#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"


int main(int argc, char **argv)
{
    sqlite3* db;
    char* zErr;
    int rc;
    char* sql;

    rc = sqlite3_open("test.db", &db);

    if (rc)
    {
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        exit(1);
    }

    sql = "create table episodes( id integer primary key,"
          "                       name text, cid int)";

    rc = sqlite3_exec(db, sql, NULL, NULL, &zErr);

    if (rc != SQLITE_OK)
    {
        if (zErr != NULL)
        {
            fprintf(stderr, "SQL error: %s\n", zErr);
            sqlite3_free(zErr);
        }
    }

    sql = "insert into episodes (name,id) values ('Cinnamon Babka2',1)";
    rc = sqlite3_exec(db, sql, NULL, NULL, &zErr);

    if (rc != SQLITE_OK)
    {
        if (zErr != NULL)
        {
            fprintf(stderr, "SQL error: %s\n", zErr);
            sqlite3_free(zErr);
        }
    }

    sqlite3_close(db);
    return 0;
}

我得到了一大堆错误,这里是其中的一些:

LNK2001 unresolved external symbol sqlite3_aggregate_context
LNK2001 unresolved external symbol sqlite3_backup_finish
LNK2001 unresolved external symbol sqlite3_backup_pagecount

我的问题是如何解决这个问题?谢谢!

最佳答案

这涉及两个项目 - sqlite3.dll 和您正在编写的代码。

主要应用

这不会构建 sqlite3 代码,但确实需要头文件“sqlite3.h”,并访问定义 sqlite3.dll 和 .dll 中函数的库文件以获取他们来自。

不要添加 .def(描述导出的内容)。 不要添加 .c 文件。

  • 在链接器设置中。
  • 总的来说

Add Additional Library Directories,该目录包含sqlite3.lib - 在链接器设置中。 - 在输入 将 sqlite3.lib 添加到附加依赖项。

构建一个带导出的 DLL (sqlite3.dll)

要构建带有导出的 DLL,您需要。

  1. 正在导出的文件的描述 (sqlite3.def)
  2. 要编译的文件 (sqlite3.c)

这将创建一个 .lib 文件(导出的描述)和一个 .dll(代码的实现)。

疑难解答

Microsoft : Windows DDK 包括一个名为 depends.exe 的应用程序。这可用于查看 .DLL.EXE 导入和导出。这有助于您确定是否正确构建了 DLL。

链接器选项/VERBOSE:LIB ( MSDN : /Verbose ) 显示链接器正在搜索导入定义的文件。

关于c - sqlite Visual Studio 2015,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35531710/

相关文章:

javascript - 未捕获的类型错误 : Cannot read property 'querySelector' of null

android - 如何将 Android 数据库与在线 SQL Server 同步?

.net - Sqlite 删除速度非常慢 - 如何加快速度?

c - 如何在 Matlab 或 C/C++ 中将经度和高度转换为地球球体上具有相等(几乎)面积的网格?

c - 8051 16 位加法/乘法结果 16 位而不是 32 位

c++ - 在 printf 之后使用 fflush 会减慢你的程序吗?

visual-studio - C# 开发人员应该学习 Emacs/Vim 有什么理由吗?

c - 整数常量对于它的类型来说太大并且对二元运算符的操作数无效

c# - Windows.Forms 助记符不起作用

java - 如何检查在editText中插入的文本是否存在于SQLite数据库中,如果存在则返回一条消息,如果不存在则返回不同的消息