C++ und SQLite unter Windows
Prof_Albert 07.07.2006 - 11:51 2116 3
Prof_Albert
Little Overclocker
|
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.... 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
|
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
|
also ich hab mir die entspechenden dlls von http://www.sqlite.org runtergeladen. dann mit 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 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... 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 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
|
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.
|