Не удается скомпилировать программное обеспечение c с помощью sqlite3.h

#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…