@BindShot

Почему не подключается библиотека в clion?

Не могу понять почему в Clion не подключается библиотекуа sqlite. Через терминал код нормально компилируется.

Сам код:
#include <stdio.h>
#include <sqlite3.h>

int main(int argc, char* argv[])
{
    sqlite3 *db;
    char *zErrMsg = 0;
    int rc;

    rc = sqlite3_open("test.db", &db);

    if( rc ){
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
    }else{
        fprintf(stderr, "Opened database successfully\n");
    }
    sqlite3_close(db);
}


CMakeLists.txt
cmake_minimum_required(VERSION 3.4)
project(projectDB)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp )

include_directories("/usr/include")

add_executable(projectDB ${SOURCE_FILES})


Вывод при компиляции:
[ 25%] Linking CXX executable projectDB
CMakeFiles/projectDB.dir/main.cpp.o: In function `main':
/home/peter/ClionProjects/projectDB/main.cpp:10: undefined reference to `sqlite3_open'
/home/peter/ClionProjects/projectDB/main.cpp:13: undefined reference to `sqlite3_errmsg'
/home/peter/ClionProjects/projectDB/main.cpp:17: undefined reference to `sqlite3_close'
collect2: error: ld returned 1 exit status
make[3]: *** [projectDB] Ошибка 1
make[2]: *** [CMakeFiles/projectDB.dir/all] Ошибка 2
make[1]: *** [CMakeFiles/projectDB.dir/rule] Ошибка 2
make: *** [projectDB] Ошибка 2
  • Вопрос задан
  • 2335 просмотров
Пригласить эксперта
Ответы на вопрос 2
@syrov
пишу программы до 99 строк
Необходимо прилинковать библиотеку, заголовка не достаточно. Посмотрите target_link_libraries, find_package, в общем не ленитесь запускать поисковик. И clion тут не при делах, ему все равно.
Ответ написан
@apu3
Код смотрите ниже, а пока теоретическая подоплёка всего этого:
Если вы хотите разобраться, что такое make и CMake, то вам стоит прочитать:

Сначала про make (make - это утилита, которая избавляет от необходимости каждый раз писать g++ main.cpp -o main -I ... -l ... итд):
1. Просто о make - https://habr.com/ru/post/211751/
2. Makefile для самых маленьких - https://habr.com/ru/post/155201/

Затем про CMake (make файлы писать можно, но это не очень удобно и чревато ошибками из-за невнимательности. Поэтому создали CMake, который и используется в CLion):
1. Введение в CMake - https://habr.com/ru/post/155467/

Сам код, который должен решить проблему:

cmake_minimum_required(VERSION 3.17)

# TODO: Здесь указано название проекта. Поменяйте на свой!
project(sqliteLearning)

# Задаём стандарт C++ (в данном случае - C++ 14 года)
set(CMAKE_CXX_STANDARD 14)

# TODO: Здесь первое название - будущее название исполняемого файла (в моём 
# случае - это sqliteLearning, вы можете выбрать любое), а второе название (main.cpp) - 
# это файлы с исходным кодом, их может быть несколько)
add_executable(sqliteLearning main.cpp)

# Пытаемся найти SQLite3
find_package (SQLite3)
# Если нашли, то:
if (SQLITE3_FOUND)
    # Сообщаем об успехе в консоль (это необязательно)
    message("Found sqlite3, and...")
    # (Указываем место, где будем искать заголовочный файл. ${SQLite3_INCLUDE_DIR} - 
    # это переменная, которая автоматически создаётся, если сработала команда find_package(SQLite3))
    include_directories(${SQLite3_INCLUDE_DIR})
    # Прилинковываем библиотеку SQLite3
    target_link_libraries (sqliteLearning ${SQLite3_LIBRARY})
endif (SQLITE3_FOUND)

# Следующие две опции могут помочь, если остальное не помогает, но помните, что это костыль
#add_compile_options(-l sqlite3)
# Нет нужды применять обе строчки одновременно
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lsqlite3")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы