如何在我的C ++项目中包含SQLite DLL?

时间:2010-10-08 19:27:28

标签: c++ visual-studio sqlite dll

我正在尝试通过DLL将SQLite添加到我的项目中。

我从download page下载了SQLiteDLL-3,提取了其内容(DLL和.h文件),并在其上运行了lib.exe以生成.lib文件。然后,在项目设置中,在链接器>>下,将包含.lib和.dll文件的目录设置为附加库目录。一般

然后我从下载页面下载了SQLiteSource-3,并将SQLite3.h文件解压缩到包含.Lib和.DLL文件的目录,并将该目录添加为C / C ++下的附加包含目录>>一般。我将#include添加到我的主文件中,然后在链接器中添加了sqlite3.dll作为附加依赖关系>>输入

基本上我跟着this,但是当我运行它时,我收到一条错误说:

fatal error LNK1107: invalid or corrupt file: cannot read at 0x2B8

我尝试了很多方法来纠正它,包括在x86和x64下构建.lib文件,并在Additional Dependencies列表中包含.lib文件的完整路径。我得到的总是那个错误。它似乎至少可以找到.h文件,因为如果我在include中弄乱了名字,我会得到一个“找不到文件”的错误,因此该部分似乎是正确的。

有人可以看到我可能做错了什么,以及如何纠正这个问题?

更新 通过将.lib文件添加到Additional Dependies列表而不是.dll文件来修复“无效或损坏的文件”问题。现在我得到了未解决的链接器错误:

错误LNK2019:函数_main中引用的未解析的外部符号_sqlite3_exec

错误LNK2019:函数_main中引用了未解析的外部符号_sqlite3_open

致命错误LNK1120:2个未解析的外部

3 个答案:

答案 0 :(得分:13)

这对我有用:

在Visual Studio 2010中,单击“工具,VS命令提示符”

在命令行窗口中输入,例如:

lib /DEF:"C:\SQLite\sqlite3.def" /OUT:"C:\SQLite\sqlite3.lib"

在Solution Explorer窗口中,右键单击您的项目,添加“sqlite3.lib”文件。

(你认为SQLite团伙可以在下载中包含.lib吗?)

答案 1 :(得分:1)

如果我记得正确的sqlite是用C语写的。 sqlite3.h文件是否有

extern "C" {}

包装声明?您可能遇到name mangling个问题。

答案 2 :(得分:1)

更新:SQLite 3.28似乎未附带.DEF文件。要创建DEF和LIB,请执行以下操作:

:: Dump SQLite.DLL exports

set DUMPBIN="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86\dumpbin.exe"
set LIBX="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86\lib.exe"
set SQL="C:\SQLite\sqlite3.dll"
set DEF="C:\SQLite\sqlite3.def"
set LIB="C:\SQLite\sqlite3.lib"

:: [1] run dumpbin
%DUMPBIN% /EXPORTS /NOLOGO /OUT:%DEF% %SQL%

:: [2] manually edit .DEF file to look proper
:: [3] run LIB
%LIBX% /DEF:%DEF% /OUT:%LIB%