"We are back" « oc.at

C++ und SQLite unter Windows

Prof_Albert 07.07.2006 - 11:51 2116 3
Posts

Prof_Albert

Little Overclocker
Avatar
Registered: Aug 2004
Location: Weinviertel
Posts: 124
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.
Bearbeitet von Prof_Albert am 07.08.2006, 01:51

gue

Addicted
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
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

Little Overclocker
Avatar
Registered: Aug 2004
Location: Weinviertel
Posts: 124
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

pädagogisch wertvoll
Avatar
Registered: Sep 2000
Location: Graz
Posts: 6441
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.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz