我正在尝试使用 sqlite 和 visual studio 制作一个程序。我已将 sqlite3.def、sqlite3.c、sqlite3.h、sqlite3.dll
文件添加到项目目录。我还在项目设置中添加了 THREADSAFE
和 SQLITE_ENABLE_COLUMN_METADATA
到 Linker -> 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,您需要。
- 正在导出的文件的描述 (sqlite3.def)
- 要编译的文件 (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/