Компиляция SQlite3 в С++
Я компилирую код таким образом:
g++ main.cpp -I sqlite3
где sqlite3 - это папка с исходными файлами, полученная мной из sqlite-amalgamation-3071100.zip, -I является флагом для включения источников.
Этот архив содержит: shell.c, sqlite3.c, sqlite3.h, sqlite3ext.h.
Это то, что я получаю:
undefined reference to `sqlite3_open'
Программа просто содержит #include и вызов функции sqlite3_open (...);
Я могу скомпилировать все в порядке, если я создам "sudo apt-get install libsqlite3-dev" и скомпилирую программу с командой
g++ main.cpp -lsqlite3
Но я хочу решить эту проблему, потому что я не хочу устанавливать некоторые библиотеки на другом компьютере, у меня нет доступа для этого!
Ответы
Ответ 1
- Шаг1: скомпилируйте sqlite3.c в sqlite3.o по gcc
- Шаг 2: скомпилируйте код С++ вместе с sqlite3.o по g++
Мой make файл для оболочки sqlite и теста С++ 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
Ответ 2
Загрузите объединение sqlite из http://www.sqlite.org/download.html.
-
Включить любую ссылку на sqlite как extern "C", поскольку sqlite написан на C.
-
Создайте библиотеку sqlite с помощью "gcc -c sqlite3.c".
-
Свяжите свою программу с вновь созданной библиотекой с помощью "g++ main.c sqlite3.o"
Ответ 3
Вам нужно скомпилировать sqlite3
с помощью gcc
. Я попробовал g++
, и результатом стали сотни ошибок и предупреждений.
Возможно, sqlite3
shoule будет написан таким образом, чтобы он компилировался с помощью компилятора С++. Компиляторы С++ намного более удобны и обеспечивают применение типов и намного лучше, чем компилятор C.
Ответ 4
В Windows с MinGW32 скомпилируйте динамическую библиотеку ссылок:
gcc -shared sqlite3.c -o sqlite3.dll
Ответ 5
На Ubuntu у меня работает следующее:
gcc -o test test.c sqlite3.c -lpthread -idl
- Я объявил #include "sqlite3.h" в исходном файле (test.c) #include НЕ работает.
- gcc -o test test.c sqlite3.c -lpthread -idl
Ссылка, как указано ниже:
https://www.sqlite.org/draft/howtocompile.html