Sqlite 使用CMake的链接器错误 我用JeTeCon Calon做纯C(C ANSI)开发,我知道它的目标是C++,但是我的公司只使用C和 CLion仅使用CMake作为构建系统
我的系统是Debian Jessie系统,安装了sqlite3和libsqlite3 dev 我正在尝试构建一个简单的sqlite3项目,如下所示: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);
#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")