繁体   English   中英

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

[英]How do I include a SQLite DLL in my C++ project?

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

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

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

基本上我跟着这个 ,但是当我运行它时,我得到一个错误说:

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个未解决的外部因素

这对我有用:

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

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

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

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

(您认为SQLite团队可能在下载中包含.lib吗?)

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

extern "C" {}

包装声明? 您可能有名称错误问题。

更新: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%

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM