Die Anwendung konnte nicht korrekt gestartet werden (0xc000007b) Visual Studio C ++

Ich habe ein einfaches Hallo-Welt-C ++ - Programm, das sqlite3.dll (64-Bit-Version) verknüpft.

Ich habe sqlite3.h und sqlite3.dll korrekt in die entsprechenden Pfade eingefügt. Die Projekte werden für 64-Bit-Architekturen kompiliert. Die Zusammenstellung und Verlinkung funktioniert einwandfrei.

Das Problem tritt auf, wenn ich versuche, die exe auszuführen.

Ich habe hier viele Fragen gesehen, die auf die Verwendung von Dependency Walker hindeuten. Ich setze den Screenshot hier ein:

Ich verstehe nicht, warum dies fehlschlägt, da sich die Datei sqlite3.dll im Ordner exe befindet. Und wenn ich gut verstehe, findet es der Abhängigkeitsabhängige. Die Bogenspalte ist x64 für alle.

Der Quellcode:

#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; 
}

Ich habe auch das folgende Dienstprogramm verwendet, wenn die exe und die dll beide 64-Bit sind:PE Deconstructor. Und beide ergeben 64 Bit.

BEARBEITE

Ich habe sqlite3.dll selbst kompiliert, indem ich den Anweisungen in @ gefolgt bi

https: //www.sqlite.org/howtocompile.htm

mit den folgenden Anweisungen:

1) geladenvcvars32.bat amd64

2) dann habe ich cd in:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64

3) und starte den Befehl:

cl sqlite3.c -link -dll -out:sqlite3.dll /MACHINE:x64 

EDIT 2

Ich habe versucht, die offizielle sqlite3.dll + sqlite3.def (x64-Binärdateien) mit dem folgenden Befehl in sqlite3.lib zu konvertieren:

lib /def:sqlite3.def /OUT:sqlite3.lib /MACHINE:x64

ohne Glück, derselbe Fehler.

EDIT 3

Ich habe die DLL im falschen Ordner abgelegt (VS hat einen seltsamen Ausgabeverzeichnisbaum mit doppelten Namen). Setzen Sie nun dasoffiziel dll im richtigen OrdnerEs klapp.

Ich konnte auch meine benutzerdefinierte DLL reparieren, siehe akzeptierte Antwort. Ich habe die offizielle Datei sqlite3.def verwendet und den Kompilierungsbefehl durch Hinzufügen des Schalters / def geändert. Angesichts der Tatsache, dass das Def für eine neuere Version von SQLite war, beschwerte sich der Linker über einige fehlende Symbole. Ich habe diese Symbole aus der Datei sqlite3.def entfernt, und sie hat die DLL-Datei korrekt kompiliert und auch LIB- und EXP-Dateien erstellt. (Der Befehl lib ist jetzt nicht mehr erforderlich, da die lib-Datei direkt erstellt wird.) Putting die neue DLL in den richtigen Ordnerklappt wunderba.

Bitte klassifizieren Sie die Frage nicht als doppelt.

Vielen Dan

Antworten auf die Frage(4)

Ihre Antwort auf die Frage