SQLite Library Problem
-
Hallo,
ich bin neu hier und neu bei C++. Arbeite mit Windows XP, Eclipse und MinGW.
Habe jedoch alte Erfahrungen mit FORTRAN (auf der VAX), Turbo Pascal und CLIPPER (auf DOS-PC). Und mit JAVA (Windows, Eclipse).
Mein Problem, hört sich ganz einfach an, habe auch das Web schon durchkämmt und vieles ausprobiert.
Heruntergebrochen auf ein ganz simples Beispiel:#include <sqlite3.h>
int main() {
sqlite3 *db;
sqlite3_open("test.db", &db);
return -1;
}führt zu
undefined reference to `sqlite3_open'
Auch bei Aufruf aus der Kommandozeile
> gcc CppTest02.cpp -l sqlite3
... cannot find -lsqlite3
collect2.exe: error: ld returned 1 exit statusHabe sqlite3.h und sqlite3.dll in das src-Verzeichnis kopiert. Fehler bleibt.
Jetzt weiss ich nicht weiter, wer kann helfen?Danke
Michel
-
Du benötigst zum Linken die passende Library-Datei (sqlite3.lib bzw. sqlite3.a).
Woher hast du denn die DLL (und Headerdatei)? Die Library-Datei muß zu deinem verwendeten Compiler (gcc) passen.Alternativ die Sourcen ("amalgamation") unter SQLite - Download herunterladen und zusammen mit deinen Projektdateien kompilieren.
-
Th69 schrieb:
...
Alternativ die Sourcen ("amalgamation") unter SQLite - Downlaod herunterladen und zusammen mit deinen Projektdateien kompilieren.Danke, habe ich gemacht, die -c Option war noch notwendig zur Erzeugung des Object-Files. sqlite3.c, sqlite3.h (und sqlite3-.dll) hatte ich aus dem SQLite Download-Bereich.
> gcc -c sqlite3.c
erzeugt sqlite3.o
sqlite3.o und sqlite3.h beide in's Source-Verzeichnis gestellt.
Gleiches Prozedere, exakt gleicher Fehler (Eclipse und Kommandozeile).Bitte nochmals um Hilfe
Danke
Michel
-
Kommando zurück, gerade seh ich's:
Muß eine Library erzeugen, kein Objectfile. das kriege ich hin. Oder eine andere Linkoption für ein Objectfile. Werde ich lernen.
-
Ich gebe auf
Habe die Library erstellt:
gcc -c sqlite3.c // Kompilierung / Erzeugen sqlite3.o
ar rcs sqlite3.a sqlite3.o // Erzeugen LibraryDann mit der Library kompiliert (im lokalen Verzeichnis, dann auch in C:\MinGW\bin hineinkopiert
Kommandozeile (mit gcc genauso wie mit g++)gcc CppTest02.cpp -l sqlite3.a bzw. >gcc CppTest02.cpp -l sqlite3.a
führt zu
c:/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../../mingw32/bin/ld.exe: cannot find -lsqlite3.a
collect2.exe: error: ld returned 1 exit statusDas gleiche mit Eclipse
g++ "-LC:\\sqlite" -o CppTest02.exe "src\\CppTest02.o"
liefert
src\CppTest02.o: In functionmain': C:\\cpp\\eclipse\\workspace\\CppTest02\\Debug/../src/CppTest02.cpp:13: undefined reference to
sqlite3_open'
collect2.exe: error: ld returned 1 exit statusWer kann mir helfen, wo hängt's?
-
Korrektur:
Dann mit der Library kompiliert (im lokalen Verzeichnis, dann auch in C:\MinGW\lib hineinkopiert
-
Ich kann dir auch nur msys2 ans Herz legen.
http://www.msys2.org/installieren und dann ist es nur noch eine sache von
pacman -S mingw-x86_64-sqlite3 mingw-i686-sqlite3
g++ -lsqlite3
-
Um die Sourcen zu kompilieren brauchst du keine Lib erzeugen, einfach
gcc CppTest02.cpp sqlite3.c -o CppTest02.exe
Oder wenn du schon die Objektdatei erzeugt hast:
gcc CppTest02.cpp sqlite3.o -o CppTest02.exe
-
Super, hat auf Anhieb geklappt, Th69, danke.
\1: Danke ebenfalls für den Hinweis. Die MSYS2 ist jedoch nur für Windows neuer als XP geeignet gemäß MSYS2-Homepage.
Den Nutzen habe ich auch noch nicht ganz verstanden. Ist das build besser als das von Eclipse?Gruß
Michel
-
Der Vorteil ist, dass man diverse libs alle schon compiliert direkt installieren kann, als wär man auf einem linux. Ich habe schon seit ewigkeiten kein boost, sqlite, zlib, pthread, opencv, ... mehr runterladen und irgendwo hin tun müssen und ggf bauen. Es ist total angenehm.