Проблема с sqlite3 и линковкой в ​​makefile - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть проект, в котором я использую библиотеку sqlite3 для создания базы данных. Файлы следующие:

| sqlite3  
    | shell.c  
    | sqlite3.c  
    | sqlite3.h  
    | sqlite3ext.h  
| database.hpp  
| database.cpp  
| main.cpp  
| makefile  

И в файле database.hpp я делаю #include "sqlite3/sqlite3.h".
Вот файл make, который я написал для этого проекта:

FLAGS = -g 

LIBS = -lsqlite3

CC = g++ 
executable = a.out

all: $(executable)

$(executable): database.o main.cpp
    $(CC) $(FLAGS) $(LIBS) database.o main.cpp -o $(executable)

database.o: database.cpp
    $(CC) $(FLAGS) $(LIBS) -c database.cpp -o database.o

.PHONY : clean

clean: 
    rm $(executable) *.o

Проблема в том, что этот make-файл прекрасно работает на моем компьютере linux manjaro, но когда я запускаю его на другом компьютере, использующем Ubuntu, программа make отправляет мне сообщения об ошибках типа undefined refrence или иногда на другом компьютере с Ubuntu, она отправляет мне can't find -lsqlite3.
Что я здесь не так делаю?
Спасибо заранее за ответ

1 Ответ

0 голосов
/ 14 февраля 2020

Вы используете системные библиотеки SQLite вместо тех, которые вы поставили. Самое простое решение - определить новое правило для sqlite3.o и зависеть от него в вашем исполняемом файле:

CFLAGS = -g
CXXFLAGS += $(CFLAGS)
LDFLAGS = -g
# SQLite needs these libraries.
LIBS = -lpthread -ldl
# see https://sqlite.org/howtocompile.html. I added one option to show how it's done
SQLITE3_OPTIONS = -DSQLITE_ENABLE_JSON1

executable = a.out

all: $(executable)

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

# No rule is necessary for main.o or database.o, these are covered by
# Make's built-in rules

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

.PHONY : clean

clean: 
    rm $(executable) *.o
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...