C++ und SQLite unter Windows

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/c_und_sqlite_unter_windows_165422/page_1 - zur Vollversion wechseln!


Prof_Albert schrieb am 07.07.2006 um 11:51

Also ich hab ein C++ Programm geschrieben das auf eine SQLite Datenbank zugreifen kann. unter linux (bei installiertem sqlite) läuft auch alles super.
nur war ich bis jetz nicht fähig das ganze unter windows zu compilieren.
Ich hab MinGW installiert
Wenn ich compilieren will kommt das....

Code:
H:\filmedb>g++ main.cpp -lsqlite3
D:\Programme\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe:
cannot find -lsqlite3
collect2: ld returned 1 exit status
Ich hab schon die sqlite3.h ins D:\Programme\MinGW\include kopiert...
trotzdem das selbe.


gue schrieb am 07.07.2006 um 12:08

Das ist ein Fehler beim Linken, nicht beim Compilieren. Du musst sicherstellen, dass die sqlite-Library (wahrscheinlich sqlite.o oder .a) im lib-Verzeichnis liegt, das der Linker durchsucht, wahrscheinlich D:\Programme\MinGW\lib oder du gibst den Pfad dazu mit dem entsprechenden Compilierflag an, iirc ist das beim gcc -L, also ca. so:
g++ main.cpp -LD:/Programme/SQLite/lib -lsqlite3


Prof_Albert schrieb am 08.07.2006 um 12:40

also ich hab mir die entspechenden dlls von http://www.sqlite.org runtergeladen. dann mit

Code:
dlltool -D sqlite3.dll -d sqlite3.def -l libsqlite3.a
die libsqlite3.a erstellt
diese dann ins D:\Programme\MinGW\lib reinkopiert
dann konnte ich kompilieren.
Die .exe läuft sogar auf anderen systemen ohne etwas zu installieren.
es muss nur die libsqlite3.dll im gleichen verzeichnis sein.
--> ich kann das programm vom USB-stick aus auf jedem rechner starten. :)
thx 4 help

nur noch ein problem:
Wenn ich das ganze unter linux compiliere mit
Code:
g++ -lsqlite3 source.cpp binary
dann kann ich die binary nur auf linux-systemen ausführen wo libsqlite3 installiert is...
ansonsten bekomm ich die meldung:

kann ich das irgendwie machen, dass ich die auch aus dem arbeitsverzeichnis nehme und nicht aus dem /usr/lib?
einfach reinkopieren hat nicht funktioniert...
Zitat
error while loading shared libraries: libsqlite3.so.0 cannot open shared object file: No such directory

ich hab auch schon versucht hier die libsqlite3.a und die ganzn .so dateien im source-verzeichnis kopiert und dann mit
Code:
g++ -lsqlite3 source.cpp binary -L./
kompiliert.
Das kompiliert auch auf einem sys ohne libsqlite3. aber ausführen gehts troztdem net.


xdfk schrieb am 08.07.2006 um 13:58

das ist der unterschied zwischen dynamischem und statischem linken

statisch gelinkt wird das binary groesser -> die library wird in das binary gepackt, dynamisch muss eben die entsprechende library dabei sein

unter linux kannst du auch ganz einfach den LD_LIBRARY_PATH=. setzen, dann sucht er im aktuellen verzeichnis nach libraries, du packst also einfach das linux binary und die lib in das gleiche dir und kannst auch das auf jedem rechner starten

ldd a.out ist immer gut um zu sehen welche libraries er von wo laedt.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026