2012-05-13 13 views
10

skompilować kod w ten sposób:Kompilacja z sqlite3 w C++

g++ main.cpp -I sqlite3 

gdzie sqlite3 jest folder z plikami źródłowymi, które otrzymałem od sqlite-amalgamation-3071100.zip, -I jest flaga na tym źródeł.

To archiwum zawiera: shell.c, sqlite3.c, sqlite3.h, sqlite3ext.h.

To właśnie otrzymują:

undefined reference to `sqlite3_open' 

Program po prostu zawierać #include i wywołanie funkcji sqlite3_open (...);


mogę skompilować wszystko w porządku, jeśli robię "sudo apt-get install libsqlite3-dev" i skompilować program z poleceniem

g++ main.cpp -lsqlite3

Ale chcę, aby rozwiązać ten problem, bo nie chce mieć aby zainstalować niektóre biblioteki na innym komputerze, nie mam do tego dostępu!

+1

Musisz zbudować bibliotekę, a następnie połączyć się z nią. –

+1

Dlaczego myślisz, że będziesz mógł połączyć się z biblioteką libsqlite3, gdy nie jest ona zainstalowana? –

+0

Kerrek SB, widzisz, że biblioteka zawiera tylko 4 pliki. Jak go zbudować i czego potrzebuję, gdy mam pliki sqlite3.c i sqlite3.h. Czy muszę utworzyć "g ++ -o sqlite3 sqlite3.h sqlite3.c" ??? Po prostu próbuję skompilować go za pomocą "g ++ -o myprog myprog.cpp sqlite3.c sqlite3.h "Ale otrzymuję wiele błędów –

Odpowiedz

3

Pobierz połączenie sqlite z http://www.sqlite.org/download.html.

  1. Dołącz żadnego odniesienia do SQLite jako extern "C", ponieważ SQLite jest napisany w C.

  2. Utwórz bibliotekę z sqlite "gcc -c sqlite3.c".

  3. Połącz swój program do nowo utworzonej biblioteki z "g ++ main.c sqlite3.o"

+0

błąd: nieprawidłowa konwersja z" void * "do" Tabela * "i tak na! 100 linii. "g ++ main.cpp sqlite3.c" Nie istnieje sqlite3.cpp. –

+0

Musisz skompilować 'sqlite3.c' z kompilatorem C (' gcc'). – Mat

+0

sqlite3 jest napisane w C , nie C++. Będziesz musiał skompilować go z 'gcc', a nie' g ++ '.I może będziesz musiał użyć' extern 'C "' w twoim kodzie C++ –

1

Ty będzie potrzeby kompilacji sqlite3 z gcc. Próbowałem g++, a wynikiem były setki błędów i ostrzeżeń.

Być może sqlite3 shoule należy napisać w taki sposób, aby kompilował się z kompilatorem C++. Kompilatory C++ są znacznie bardziej wybiórcze i wymuszają typy i są o wiele lepsze niż kompilator C.

9
  • Krok 1: skompilować sqlite3.c do sqlite3.o przez gcc
  • Krok 2: skompilować kod C++ wraz z sqlite3.o przez g ++

Moje makefile SQLite skorupy i C++ test api:

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

W systemie Windows z MinGW32 skompiluj bibliotekę dołączaną dynamicznie przez: