我有一個簡單的hello world C++程序,它鏈接sqlite3.dll(64位版本)。應用程序無法正確啓動(0xc000007b)Visual Studio C++
我在相應的路徑中正確添加了sqlite3.h和sqlite3.dll。這些項目針對64位體系結構進行編譯。編譯和鏈接沒問題。
當我嘗試運行exe文件時出現問題。
我在這裏看到很多問題,建議使用依賴walker。我在這裏把截圖:
我不明白爲什麼失敗,因爲sqlite3.dll是在exe文件的文件夾。如果我很瞭解依賴沃克發現它。所有的拱列都是x64。
的源代碼:
#include <iostream>
#include "sqlite3.h"
int main()
{
std::cout<< "Hello world and all that" << std::endl;
sqlite3 *db;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("test.db", &db);
if(rc){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
exit(0);
}else{
fprintf(stderr, "Opened database successfully\n");
}
sqlite3_close(db);
return 0;
}
我也使用如下的效用如果EXE和DLL都是64位:PE Deconstructor
。它們都是64位。
EDIT
我已經由我自己以下的說明編譯sqlite3.dll在
https://www.sqlite.org/howtocompile.html
與以下說明:
1)加載vcvars32.bat amd64
2 )然後我cd:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64
3)併發起命令:
cl sqlite3.c -link -dll -out:sqlite3.dll /MACHINE:x64
編輯2
我試圖官方sqlite3.dll + sqlite3.def(64二進制文件)轉換與到sqlite3.lib以下命令:
lib /def:sqlite3.def /OUT:sqlite3.lib /MACHINE:x64
沒有運氣,同樣的錯誤。
編輯3
我把該dll中錯誤的文件夾(VS有重名一個奇怪的輸出目錄樹)。現在把官方 DLL放在正確的文件夾它的工作原理。
我設法修復我的自定義生成的DLL,請參閱接受的答案。我拿着官方的sqlite3.def文件,並通過添加/ def開關來修改編譯命令。鑑於def是針對更新版本的sqlite的,linker抱怨缺少一些符號。我從sqlite3.def文件中刪除了這些符號,並正確編譯了dll文件,並生成了.lib和.exp文件。(因爲lib文件是直接創建的,所以現在不需要lib命令)。把新的dll放在正確的文件夾的作品就像是魅力。
請不要將問題分類爲重複。
感謝
不要害怕,只有重複被關閉爲重複。 :-) – Downvoter
從我可以看到,似乎你的DLL編譯沒有任何出口,也許一些DEF文件在編譯過程中丟失?您的sqlite3.dll沒有任何導出表項。將/DEF:sqlite3.def添加到您的sqlite編譯命令中 –
他們將DEF文件放在二進制包中:https://www.sqlite.org/2015/sqlite-dll-win64-x64-3090100.zip。下載DEF文件並將/ DEF參數添加到您的'cl'命令 –