Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 使用CMake的链接器错误 我用JeTeCon Calon做纯C(C ANSI)开发,我知道它的目标是C++,但是我的公司只使用C和 CLion仅使用CMake作为构建系统_Sqlite_Cmake - Fatal编程技术网

Sqlite 使用CMake的链接器错误 我用JeTeCon Calon做纯C(C ANSI)开发,我知道它的目标是C++,但是我的公司只使用C和 CLion仅使用CMake作为构建系统

Sqlite 使用CMake的链接器错误 我用JeTeCon Calon做纯C(C ANSI)开发,我知道它的目标是C++,但是我的公司只使用C和 CLion仅使用CMake作为构建系统,sqlite,cmake,Sqlite,Cmake,我的系统是Debian Jessie系统,安装了sqlite3和libsqlite3 dev 我正在尝试构建一个简单的sqlite3项目,如下所示: #include <sqlite3.h> #include <stdio.h> int main() { sqlite3 *sqlConnection; int ret; ret = sqlite3_open("database/path.db, &sqlConnection);

我的系统是Debian Jessie系统,安装了sqlite3和libsqlite3 dev

我正在尝试构建一个简单的sqlite3项目,如下所示:

#include <sqlite3.h>
#include <stdio.h>

    int main() {
    sqlite3 *sqlConnection;
    int ret;
    ret = sqlite3_open("database/path.db, &sqlConnection);
    if (ret) {
        printf("Ups ... can't open %d", ret);
    }
    do_some_queries(sqlConnection);
    return 0;
}
构建时,无论是通过Clion还是通过命令行,我都会收到链接器错误:

...
undefined reference to `sqlite3_prepare_v2'
undefined reference to `sqlite3_column_int'
undefined reference to `sqlite3_open'
...
我知道我必须向CMake指出sqlite3的位置,但我找不到一种方法

“find_package”和“find_library”可以做到这一点,但我找不到方法

我也找到了,但无法成功使用


那么,如何将sqlite3与Cmake集成?

您需要将sqlite头文件的路径添加到include路径中。然后使用
target\u link\u库链接sqlite库


我已经找到了一个解决办法,但这不是正确的方法

因为在Debian上,“gcc main.c-lsqlite3”可以工作(安装了libsqlite3 dev),所以将-lsqlite3标志传递给链接器就可以了

所以我变了

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


它成功了。

sqlite3.c
添加到源代码中。@CL.你说下载sqlite3源代码并与项目一起编译?我已经尝试过了,但也遇到了其他链接器错误(线程等),而且,我不喜欢在系统中重复源代码。我会努力的。这个libsqlite3开发的可能副本已经将sqlite3.h放在gcc路径上,对于-lsqlite3选项也是如此,那么我如何在Cmake上为底层gcc发送“-lsqlite3”选项呢?你不明白答案,对吗?sqlite3应该通过target\u link\u库添加。所以应该只
target\u link\u库(sqlite3)
work@usr1234567@Cristiano-l是一个链接器标志,您的非解决方案只是碰巧起作用。仔细看看
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lsqlite3")