#c #sqlite #compilation
#c #sqlite #Сборник
Вопрос:
Я хочу скомпилировать код, который использует <sqlite3.h>
Makefile:
CXXFLAGS = -std=c 11 -I../../bin/include -L../../bin/lib/ -lsqlite3
all : evolve move_to_db
evolve :
clean :
rm -f *.o evolve move_to_db
с версией gcc:
g --version
g (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Сбой с ошибкой:
$ make
g -std=c 11 -I../../bin/include -L../../bin/lib/ -lsqlite3 evolve.cpp -o evolve
/usr/bin/ld: /tmp/ccANBfuV.o: in function `check_exist(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
evolve.cpp:(.text 0x8129): undefined reference to `sqlite3_open_v2'
/usr/bin/ld: evolve.cpp:(.text 0x8173): undefined reference to `sqlite3_prepare_v2'
/usr/bin/ld: evolve.cpp:(.text 0x818d): undefined reference to `sqlite3_bind_int64'
/usr/bin/ld: evolve.cpp:(.text 0x81a4): undefined reference to `sqlite3_bind_int64'
/usr/bin/ld: evolve.cpp:(.text 0x81e0): undefined reference to `sqlite3_bind_text'
/usr/bin/ld: evolve.cpp:(.text 0x821c): undefined reference to `sqlite3_bind_text'
/usr/bin/ld: evolve.cpp:(.text 0x8236): undefined reference to `sqlite3_bind_int64'
/usr/bin/ld: evolve.cpp:(.text 0x8272): undefined reference to `sqlite3_bind_text'
/usr/bin/ld: evolve.cpp:(.text 0x8282): undefined reference to `sqlite3_step'
/usr/bin/ld: evolve.cpp:(.text 0x82a2): undefined reference to `sqlite3_finalize'
/usr/bin/ld: evolve.cpp:(.text 0x82ae): undefined reference to `sqlite3_close_v2'
collect2: error: ld returned 1 exit status
make: *** [<builtin>: evolve] Error 1
Он компилируется без проблем с gcc
g (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
на моей другой машине.
Комментарии:
1. Не говоря
libsqlite3
уже о том, что существует в каталоге../../lib/
2. Я думаю, вам нужно добавить lib
sqlite
в конец командной строки. К моменту обработкиevolve.cpp
символы в библиотеке уже удалены.3. Это ошибка компоновки, а не компиляции. Ошибки связывания возникают либо в том случае, если вы не ссылаетесь на требуемую библиотеку, либо если заголовок, в который он включен, из другой и несовместимой версии библиотеки, на которую вы ссылаетесь.
4. Почему вы добавляете библиотеки
CXXFLAGS
? Вам следует еще раз просмотреть ссылку на Makefile…