2012-05-13 7 views
10

ich kompilieren Code auf diese Weise:Compilieren von Sqlite3 in C++

g++ main.cpp -I sqlite3 

wo sqlite3 ein Ordner mit Quelldateien, die ich von sqlite-amalgamation-3071100.zip empfangen, -I ist Flag Quellen für einschließlich.

Dieses Archiv enthält: shell.c, sqlite3.c, sqlite3.h, sqlite3ext.h.

Dies ist, was ich erhalten:

undefined reference to `sqlite3_open' 

Das Programm gerade # include und Aufruf der Funktion sqlite3_open enthalten (...);


ich alles in Ordnung zusammenstellen kann, wenn ich „sudo apt-get install libsqlite3-dev“ und kompiliert Programm mit dem Befehl

g++ main.cpp -lsqlite3

Aber ich mag lösen dieses Problem machen, denn ich will nicht haben, Um einige Bibliotheken auf einem anderen Computer zu installieren, habe ich keinen Zugriff darauf!

+1

Sie müssen die Bibliothek erstellen und dann eine Verknüpfung herstellen. –

+1

Warum glaubst du, dass du mit der Bibliothek libsqlite3 verlinken kannst, wenn sie nicht installiert ist? –

+0

Kerrek SB, Sie sehen, dass die Bibliothek nur 4 Dateien enthält. Wie man es erstellt und was ich brauche, wenn ich die Dateien sqlite3.c und sqlite3.h habe. Muss ich "g ++ -o sqlite3 sqlite3.h sqlite3.c" machen ??? Ich versuche es nur mit "g ++ -o myprog myprog" zu kompilieren.cpp sqlite3.c sqlite3.h "Aber ich bekomme eine Menge Fehler. –

Antwort

3

Laden Sie die sqlite-Verschmelzung von http://www.sqlite.org/download.html herunter.

  1. Fügen Sie alle Referenz als extern "C" SQLite, da SQLite in C geschrieben wird

  2. die SQLite-Bibliothek erstellen mit "gcc -c sqlite3.c".

  3. Verknüpfen Sie Ihr Programm in den neu erstellten Bibliothek mit "g ++ main.c sqlite3.o"

+0

Fehler: ungültige Konvertierung von 'void *' zu 'Table *' und so auf !!! 100 Zeilen. "g ++ main.cpp sqlite3.c" Es ist keine sqlite3.cpp vorhanden. –

+0

Sie müssen 'sqlite3.c' mit einem C-Compiler (' gcc') kompilieren. – Mat

+0

sqlite3 wird in C geschrieben , nicht C++. Sie müssen es mit 'gcc' kompilieren, nicht' g ++ '. Und Sie müssen möglicherweise' extern "C" in Ihrem C++ Code verwenden. –

1

Sie wird Notwendigkeit sqlite3 mit gcc zu kompilieren. Ich versuchte g++ und das Ergebnis war Hunderte von Fehlern und Warnungen.

Vielleicht sqlite3 Shoule geschrieben werden, so dass es mit einem C++ - Compiler kompilieren würde. C++ - Compiler sind viel wählerischer und erzwingen Typen und sind viel besser als ein C-Compiler.

9
  • Schritt 1: kompilieren sqlite3.c zu sqlite3.o von gcc
  • Schritt 2: kompiliert Ihre c zusammen ++ Code mit sqlite3.o von g ++

Meine Make-Datei für SQLite-Shell und C++ api-Test:

1 CXX = g++ 
    2 cc = gcc 
    3 
    4 LIB = -lpthread -ldl 
    5 BIN = sqlite apiTest 
    6 
    7 all : $(BIN) 
    8 sqlite : sqlite3.c shell.c 
    9  $(cc) -o [email protected] $^ $(LIB) 
10 apiTest : apiTest.cpp sqlite3.o 
11  $(CXX) -o [email protected] $^ $(LIB) 
12 sqlite3.o : sqlite3.c 
13  $(cc) -o [email protected] -c $^ 
14 
15 clean : 
16  rm -f $(BIN) 
17 
18 .PHONY: all, clean 
0

Unter Windows mit MinGW32 kompiliert einen Dynamic Link Library von:

gcc -shared sqlite3.c -o sqlite3.dll