Компиляция 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

  1. Я объявил #include "sqlite3.h" в исходном файле (test.c) #include НЕ работает.
  2. gcc -o test test.c sqlite3.c -lpthread -idl

Ссылка, как указано ниже:

https://www.sqlite.org/draft/howtocompile.html