簡體   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