SQLite in C++, Probleme Wrapper Library einzubinden



  • Hallo,
    Ich bin noch zimlich neu in Sachen C++ und so, und versuche gerade ein kleines Programm zu scheiben, mit dem ich auf eine SQLite Datenbank zugreifen kann.
    Ich moechte einen Wrapper benutzen, da die libsqlite anscheinend nur fuer C geschrieben wurde und daher eher wenig objektorientiert ist. Ich fand nach kurzem googeln auch gleich "SQLite Wrapped" (http://www.alhem.net/project/sqlite/).
    Ich schaffe es leider absolut nicht diese Library in mein Programm einzubinden.
    Schon beim compilen der Library bekam ich einen fehler:

    xtremely@xtremely:~/downloads/sqlitewrapped-1.3$ make
    g++  -Wall -g -O2 -I/usr/devel/include -I. -MD  -c -o Database.o Database.cpp
    g++  -Wall -g -O2 -I/usr/devel/include -I. -MD  -c -o Query.o Query.cpp
    g++  -Wall -g -O2 -I/usr/devel/include -I. -MD  -c -o StderrLog.o StderrLog.cpp
    g++  -Wall -g -O2 -I/usr/devel/include -I. -MD  -c -o SysLog.o SysLog.cpp
    SysLog.cpp: In constructor ‘SysLog::SysLog(const std::string&, int, int)’:
    SysLog.cpp:43: error: ‘strcpy’ was not declared in this scope
    make: *** [SysLog.o] Error 1
    

    Diesen behob ich allerdings nach http://archlinux.org/pipermail/arch-dev-public/2008-March/005175.html:
    ich fuegte zur Syslog.cpp folgende Zeile hinzu:

    #include <cstring>
    

    Nun ging es einwandfrei zu compilen 🙂 :

    xtremely@xtremely:~/downloads/sqlitewrapped-1.3$ make
    g++  -Wall -g -O2 -I/usr/devel/include -I. -MD  -c -o SysLog.o SysLog.cpp
    ar cru libsqlitewrapped.a Database.o Query.o StderrLog.o SysLog.o 
    ranlib libsqlitewrapped.a
    cat IError.h StderrLog.h SysLog.h Database.h Query.h > libsqlitewrapped.h
    

    Um die Library zu testen versuchte ich das mitgelieferte Beispielprogramm (sqlite3test.cpp) zu compilen, wobei ich vorher die Zeile

    #include <libsqlitewrapped.h>
    

    in

    #include "libsqlitewrapped.h"
    

    umschrieb.
    Nach dem Versuch das Programm zu compilen erhielt ich folgendes:

    xtremely@xtremely:~/downloads/sqlitewrapped-1.3$ g++ -L./ -lsqlitewrapped -lsqlite3 sqlite3test.cpp 
    /tmp/ccbIL9Ml.o: In function `main':
    sqlite3test.cpp:(.text+0x1d): undefined reference to `Database::Mutex::Mutex()'
    sqlite3test.cpp:(.text+0x6d): undefined reference to `Database::Database(Database::Mutex&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IError*)'
    sqlite3test.cpp:(.text+0xe3): undefined reference to `Query::Query(Database&)'
    sqlite3test.cpp:(.text+0x108): undefined reference to `Database::~Database()'
    sqlite3test.cpp:(.text+0x184): undefined reference to `Query::execute(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    sqlite3test.cpp:(.text+0x255): undefined reference to `Query::execute(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    sqlite3test.cpp:(.text+0x326): undefined reference to `Query::execute(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    sqlite3test.cpp:(.text+0x3f7): undefined reference to `Query::get_result(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    sqlite3test.cpp:(.text+0x49f): undefined reference to `Query::getval()'
    sqlite3test.cpp:(.text+0x4bb): undefined reference to `Query::getstr()'
    sqlite3test.cpp:(.text+0x580): undefined reference to `Query::fetch_row()'
    sqlite3test.cpp:(.text+0x596): undefined reference to `Query::free_result()'
    sqlite3test.cpp:(.text+0x5ae): undefined reference to `Query::~Query()'
    sqlite3test.cpp:(.text+0x5d6): undefined reference to `Query::~Query()'
    sqlite3test.cpp:(.text+0x5ef): undefined reference to `Database::~Database()'
    sqlite3test.cpp:(.text+0x614): undefined reference to `Database::~Database()'
    sqlite3test.cpp:(.text+0x62d): undefined reference to `Database::Mutex::~Mutex()'
    sqlite3test.cpp:(.text+0x664): undefined reference to `Database::Mutex::~Mutex()'
    /tmp/ccbIL9Ml.o: In function `StderrLog::StderrLog()':
    sqlite3test.cpp:(.text._ZN9StderrLogC1Ev[StderrLog::StderrLog()]+0x16): undefined reference to `vtable for StderrLog'
    collect2: ld returned 1 exit status
    

    Gleiche bzw. aehnliche fehler bekomme ich auch, wenn ich mein Programm compilen will. 😞
    Bitte helft mir... ich bin kurz vor der Verzweiflung 😕

    Vielleicht kennt ihr einige bessere SQLite Wrapper, welche nicht solche Probleme machen...?



  • Ok vielen Dank fuer die tatkraeftige Unterstuetzung, aber ich bin gerade selbst auf die Loesung gekommen... g++ ist es anscheinend nicht egal in welcher Reihenfolge er die Parameter bekommt!
    Mit

    g++ -o test sqlite3test.cpp -I./ -L./ -lsqlitewrapped -lsqlite3
    

    Funktioniert alles einwandfrei!



  • xtremely schrieb:

    Vielleicht kennt ihr einige bessere SQLite Wrapper, welche nicht solche Probleme machen...?

    Ich hätte da noch Tntdb im Angebot.


Anmelden zum Antworten