dll einbinden



  • Hallo, obwohl ich die .dll eingebunden habe (hoffentlich war es richtig, s. Z 1), tauchen diese Fehler auf:

    Error 1 error LNK2019: unresolved external symbol _sqlite3_close referenced in function _main database_use.obj database_use

    Error 4 fatal error LNK1120: 3 unresolved externals

    Wo liegt mein Fehler? Kann mir wer helfen?
    Hier mein Code:

    // database_use.cpp : Defines the entry point for the console application.
    //
    #pragma comment(lib, "C:/sqlite3.dll")
    #include "stdafx.h"
    #include <iostream>
    #include <string>
    #include <sqlite3.h>
    
    using namespace std;
    
     int main()
     {
       // Als erstes legen wir einen sqlite3-Zeiger an
       sqlite3* Database;
       // und instantiieren ein Objekt von string auf dem Stack
       string Path;
    
       // Danach fragen wir den Benutzer nach dem Pfad zur Datenbankdatei
       cout << "Pfad zur Datenbankdatei: ";
       cin >> Path;
    
       // Nun können wir die Datenbank öffnen!
       if(sqlite3_open(Path.c_str(), &Database) != SQLITE_OK)
       {
          // Es ist ein Fehler aufgetreten!
          cout << "Fehler beim Öffnen: " << sqlite3_errmsg(Database) << endl;
    
          // Programm beenden
          return 1;
       }
    
       // Es hat alles geklappt, die Datenbank wurde geöffnet
       cout << "Datenbank erfolgreich geöffnet!" << endl;
    
       // Jetzt können wir die Datenbank wieder schließen
       sqlite3_close(Database);
    
       cout << "Datenbank geschlossen!" << endl;
    
       // Programm beenden
       return 0;   
     }
    


  • Nein, du mußt die "sqlite3.lib"-Datei hinzulinken (und diese Datei muß dann auch zu dem von dir verwendeten Compiler/Linker passen).



  • #pragma comment(lib, "C:/sqlite3.lib") //lib, nicht dll
    


  • Nein, du mußt die "sqlite3.lib"-Datei hinzulinken (und diese Datei muß dann auch zu dem von dir verwendeten Compiler/Linker passen).

    Wie genau mach ich das?
    Benutze VS 2008



  • Tachyon schrieb:

    #pragma comment(lib, "C:/sqlite3.lib") //lib, nicht dll
    

    Hmm hab aber nur die dll. Wo bekomme ich die .lib her?



  • Welches der verfügbaren sqlite3 Pakete hast Du denn runtergeladen?



  • Tachyon schrieb:

    Welches der verfügbaren sqlite3 Pakete hast Du denn runtergeladen?

    Also einmal die .exe, womit ich halt eine test sqlite3-db erstellt habe und dann sqlitedll-3_6_23_1.zip (253.34 KiB) wo die sqlite3.dll + eine def datei drinne ist.



  • Dann musst Du es wohl oder übel über die .def-Datei machen. Hier mal eine Anleitung.
    Alternativ könntest Du Dir auch das empfohlene Paket (sqlite-amalgamation-3_6_23_1.zip) runterladen, wo alles als Quellcode enthalten ist. Ich denke, dass ist die bessere Variante.



  • Alternativ könntest Du Dir auch das empfohlene Paket (sqlite-amalgamation-3_6_23_1.zip) runterladen, wo alles als Quellcode enthalten ist. Ich denke, dass ist die bessere Variante.

    Ok hab es gerade mal ausproiert.
    Hab es runtergeladen, entpackt und diese paar Dateien in mein aktuellen Projectordner kopiert.
    Als ich mein Project builden wollte, kamen immer noch die Fehler 😞



  • Th69 schrieb:

    ...muß dann auch zu dem von dir verwendeten Compiler/Linker passen).

    Das gilt für C++, aber nicht für C (sqlite hat 'n C-API), da für C das ABI gut definiert ist.

    baustein schrieb:

    Als ich mein Project builden wollte, kamen immer noch die Fehler 😞

    Du musst die *.c Quellen mit compilieren, also zu Deinem Projekt hinzufügen.



  • Juhu, ich komme der Sache immer näher.
    Nun kommt nur noch ein Error:

    Error 1 fatal error C1853: 'Debug\database_use.pch' precompiled header file is from a previous version of the compiler, or the precompiled header is C++ and you are using it from C (or vice versa)

    Ich benutze c++ aber will die *.c files mit compilieren. Da wird sicher der Konflikt sein.
    Wie kann ich das umgehen?



  • Das Projekt einmal komplett neu erstellen.

    Wenn das nicht geht, in den Projektoptionen die vorkompilierten Header abstellen.



  • Tachyon schrieb:

    Das Projekt einmal komplett neu erstellen.

    Wenn das nicht geht, in den Projektoptionen die vorkompilierten Header abstellen.

    Ok es kommt noch die gleiche Fehlermeldung aber ich verstehe auch nicht genau , was du mit "Projekt neu erstellen" meinst?
    Nen normales Rebuild? Oder wirklich das Projekt nochmal komplett manuell neu erstellen?



  • Wenn Du MSVC benutzt (nehme ich jetzt mal an):
    * Erstellen->Projektmappe bereinigen
    * Erstellen->Projektmappe neu erstellen.



  • * Erstellen->Projektmappe bereinigen
    * Erstellen->Projektmappe neu erstellen.

    Ich benutze MS Visual Studio, ja.
    Hab zwar eine englischsprachige Version aber konnte trotzdem kein "Erstellen->Projektmappe bereinigen" finden.

    Ich habe nun einfach nen komplett neues leeres Project erstellt, welches keine vorkompilierten Dateien hat.
    Ich habe eine main.cpp erstellt:

    #include <iostream>
    #include <string>
    extern "C"
    {
    #include <sqlite3.h>
    } 
    
    using namespace std;
    
     int main()
     {
       // Als erstes legen wir einen sqlite3-Zeiger an
       sqlite3* Database;
       // und instantiieren ein Objekt von string auf dem Stack
       string Path;
    
       // Danach fragen wir den Benutzer nach dem Pfad zur Datenbankdatei
       cout << "Pfad zur Datenbankdatei: ";
       cin >> Path;
    
       // Nun können wir die Datenbank öffnen!
       if(sqlite3_open(Path.c_str(), &Database) != SQLITE_OK)
       {
          // Es ist ein Fehler aufgetreten!
          cout << "Fehler beim Öffnen: " << sqlite3_errmsg(Database) << endl;
    
          // Programm beenden
          return 1;
       }
    
       // Es hat alles geklappt, die Datenbank wurde geöffnet
       cout << "Datenbank erfolgreich geöffnet!" << endl;
    
       // Jetzt können wir die Datenbank wieder schließen
       sqlite3_close(Database);
    
       cout << "Datenbank geschlossen!" << endl;
    
       // Programm beenden
       return 0;   
     }
    

    und die sql-dateien (die ich runtergeladen habe) in das Projekt mit engebunden.

    Wenn ich das ganze builden will, kommen zwei Errirs:

    Error 1 error LNK2005: _main already defined in main.obj shell.obj sqldb_use

    Error 2 fatal error LNK1169: one or more multiply defined symbols found



  • shell.c darfst Du nicht mitbauen. Sonst hast Du die main-Funktion zwei mal. Das sagt aber eigentlich auch die Fehlermeldung. Und vielleicht mal die Beschreibungen auf der sqlite-Seite lesen...


Anmelden zum Antworten