LINUX.ORG.RU

Ошибка при использовании Sqlite3 в VSCode

 , ,


0

1

Некоторое время назад писал свою программу в windows 10 на Visual Studio. Там я скачал Sqlite3, сделал #include «sqlite/sqlite3.h» и всё нормально работало. Но позже я решил попрограммировать в ubuntu linux и сделал пул с гитхаба этой же программы. Компилятор стал выдавать ошибки

undefined reference to `sqlite3_open'
undefined reference to `sqlite3_exec'
undefined reference to `sqlite3_close'

Ошибку выдает даже если я просто открываю и закрываю базу данных

TableEditor::TableEditor()
{
    
    
    sqlite3_open("myDB.db", &db);
 
    sql = "CREATE TABLE EVENTS IF NOT EXISTS("
        "ID INT PRIMARY       KEY     NOT NULL,"
        "DAY                  INT     NOT NULL,"
        "MONTH                INT     NOT NULL,"
        "YEAR                 INT     NOT NULL,"
        "EVENT                TEXT    NOT NULL);"; 
 
    sqlite3_exec(db, sql, NULL, NULL, NULL);
 
}
...
TableEditor::~TableEditor()
{
    sqlite3_close(db);
}

Я скачаk sqlite-amalgamation и все файлы которые были в архиве я добавил в папку которую назвал sqlite по идее всё должно заработать если сделать

#include "sqlite/sqlite3"

Но по прежнему ошибка. Я уже даже пытался вводить команды

g++ main.cpp -o executable -lsqlite3
gcc -I ~/sqlite sqlite3.c shell.c -o sqlite3 -ldl -pthread
g++ main.cpp -lsqlite3

Это тоже не помогло. Почему появляется эта ошибка? Можно ли её как-то исправить?


Ответ на: комментарий от MKuznetsov

Правильно ли я понял что нужно создать makefile и добавить туда это?

CFLAGS = -g
CXXFLAGS += $(CFLAGS)
LDFLAGS = -g
LIBS = -lpthread -ldl
SQLITE3_OPTIONS = -DSQLITE_ENABLE_JSON1

executable = a.out

all: $(executable)

$(executable): database.o sqlite3.o main.o
    $(CXX) $(LDFLAGS) $(LIBS) $^ -o $@


sqlite3.o: sqlite/sqlite3.c sqlite/sqlite3.h
    $(CC) $(CFLAGS) -lsqlite3 $(SQLITE3_OPTIONS) -c -o $@ $< 

.PHONY : clean

clean: 
    rm $(executable) *.o

И да, я установил дополнение Makefile tools. Только ничего не меняется и даже после переименования

Jython
() автор топика
Ответ на: комментарий от Jython

начнём с начала и мелкими шагами…пишите в Debian/Ubuntu/Mint ?

чтобы разрабатывать с использованием sqlite, надо поставить библиотеки разработчика :

sudo apt-get install libsqlite3-dev

libsqlite3-dev в одном пакете.

в вашем Makefile: sqlite3.c sqlite3ext.c и так далее - это ваши самописные исходники или вы их где (в sqlite) взяли ? в первом случае их надо как-то более удачно переименовать, во втором выбросить из проекта

MKuznetsov ★★★★★
()
Ответ на: комментарий от Jython

Установку пакетов производил.

Эти файлы взял по этой ссылке https://www.sqlite.org/download.html Внутри первая ссылка

эти файлы тебе ненужны - это исходники самого sqlite. Можешь смело удалить.

простейший Makefile будет выглядить примерно так (с руки пишу, могут быть ошибки/опечатки и не забудьте TAB поставить где надо)

# основные опции
CFLAGS=-g -Wall 

# добавляем sqlite в проект
CFLAGS+=`pkg-config -cflags sqlite3`
LDLIBS+=`pkg-config -libs sqlite3`

# cpp флаги - такие как C
CXXFLAGS=$(CFLAGS)

# основная цель database
all: database

# получаем её из объектника database.o
database: database.o

# сам объектник будет делаться встренными правилами Makefile

# доп.цель clean: почистить каталог от мусора
.PHONY:clean

clean:
      $(RM) database.o


SP/ про VSCode не скажу, не использую и вам не советую

MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 2)
Ответ на: комментарий от MKuznetsov

Так эти файлы работали в windows. Ну ладно придется удалить их и разбираться с makefile. После того как я отредактирую makefile, нужно же потом в терминале прописать make?

Jython
() автор топика
Ответ на: комментарий от MKuznetsov
PCSC_CFLAGS := $(shell pkg-config --cflags sqlite3)
PCSC_LDFLAGS := $(shell pkg-config --libs sqlite3)

SOURCES := main.cpp
OBJECTS := $(SOURCES:%.cpp=%.o)

organiser: $(OBJECTS)
		g++ $(OBJECTS) $(PCSC_LDFLAGS) -o $@

%.o: %.cpp
		g++ $(PCSC_CFLAGS) -c $<

Вот такой файл получился в итоге. Всё заработало только жаль что билд не работает только исполнять файл командой ./organiser

И ещё создает БД, но таблицу не хочет создавать. Не пойму почему

Jython
() автор топика
Ответ на: комментарий от Jython

Всё заработало только жаль что билд не работает только исполнять файл командой ./organiser

в vscode кнопочки «собрать/запустить» не работают ? это в гугл. «vscode makefile» и там расскажут; к С/С++ и linux отношения не имеет

И ещё создает БД, но таблицу не хочет создавать. Не пойму почем

чтобы понять почему, надо анализировать результат sqlite_exec, получать оттуда код описание ошибки. И на это реагировать

MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 1)