在 CMakeLists.txt 中链接 GSL

     2023-02-22     274

关键词:

【中文标题】在 CMakeLists.txt 中链接 GSL【英文标题】:Linking GSL in CMakeLists.txt 【发布时间】:2017-06-29 09:41:28 【问题描述】:

我有一个包含多个文件的代码,它使用 GSL 库。当我通过终端使用命令编译代码时

g++ main.cpp -lm -lgsl -lgslcblas -o Exec

这会编译并给出正确的输出并且没有错误。 但是,当我尝试在 CLion 中构建代码时,出现错误

undefined reference to `gsl_rng_uniform'

我已经通过 CMakeLists.txt 链接了我的代码中的各种 .cpp 文件,但我认为,我必须使用类似于标志的东西才能链接到 GSL。 我的 CMakeLists.txt 文件目前如下(源文件中只包含 .cpp 文件,不包含 .h 文件):

cmake_minimum_required(VERSION 3.7)
project(Unitsv1)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp
                 transition.cpp
                 random.cpp)
add_executable(Unitsv1 $SOURCE_FILES)

我对 C++ 很陌生,似乎无法在网上找到任何答案。 谢谢

【问题讨论】:

将此命令附加到您的 CMakeLists.txt target_link_libraries(Unitsv1 gsl) What is an undefined reference/unresolved external symbol error and how do I fix it?的可能重复 必须确保它也在搜索路径中。 cmake.org/cmake/help/v3.0/command/link_directories.html 【参考方案1】:

您尚未在 GSL 库中进行链接,因此链接器将找不到它提供的任何符号。像这样的东西应该能让你大部分时间到达那里:

cmake_minimum_required(VERSION 3.7)
project(Unitsv1)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED YES)   # See below (1)

set(SOURCE_FILES main.cpp
                 transition.cpp
                 random.cpp)
add_executable(Unitsv1 $SOURCE_FILES)

find_package(GSL REQUIRED)    # See below (2)
target_link_libraries(Unitsv1 GSL::gsl GSL::gslcblas)

如果您的代码使用 C++11,那么您需要 (1) 处的行来确保您真正获得 C++11 支持。如果没有CMAKE_CXX_STANDARD_REQUIRED YESCMAKE_CXX_STANDARD 变量仅充当“如果它可用,则使用它,或者回退到编译器可以提供的最接近的标准”。如果您有兴趣,可以找到详细的文章here。

您的问题更重要的部分是 (2)。 find_package() 命令查找 GSL 库等,并使它们可用作导入目标 GSL::gslGSL::gslcblas。然后使用target_link_libraries() 将可执行文件链接到它们,如图所示。 CMake 文档详细解释了 find_package() 方面的工作原理:

从这里开始:find_package() GSL 规范:FindGSL module 链接:target_link_libraries()

【讨论】:

所以我不得不添加 include_directories($GSL_INCLUDE_DIR) 但它起作用了!非常感谢。 这很奇怪。 GSL::gsl 导入目标已将其 INTERFACE_INCLUDE_DIRECTORIES 属性设置为 GSL_INCLUDE_DIRS 的内容,因此没有必要这样做。

在我的主 CMakeLists.txt 中编译 OpenCV 并将其链接到我的项目

】在我的主CMakeLists.txt中编译OpenCV并将其链接到我的项目【英文标题】:CompileandlinkOpenCVtomyprojectinmymainCMakeLists.txt【发布时间】:2018-05-1906:10:23【问题描述】:我是cmake的新手。我有一个使用dlib和opencv的项目。它们被定义为位于th... 查看详情

cmakelists.txt中怎么增加动态链接库lzmq

参考技术Asudoapt-getinstalllibzmq3-dev//先安装库在cmake总加入find_package(PkgConfigREQUIRED)pkg_check_modules(ZMQlibzmq)link_directories($ZMQ_LIBRARY_DIRS)include_directories($ZMQ_INCLUDE_DIRS)target_link_libraries(xxx$ZMQ_LIBRARIES)本回答被提问者采纳 查看详情

在 CMakeLists.txt 中添加 FLTK 库

】在CMakeLists.txt中添加FLTK库【英文标题】:AddFLTKlibraryinCMakeLists.txt【发布时间】:2018-08-1215:25:37【问题描述】:我需要在我的CMakeLists.txt中添加FLTK作为依赖项。基于<project_root/dist/FLTK>的库。它建在<project_root/dist/FL... 查看详情

CMakeLists.txt 结构

】CMakeLists.txt结构【英文标题】:CMakeLists.txtstructure【发布时间】:2018-08-1716:28:38【问题描述】:我想开始一个cmake项目,我有很多文件。结构如下。types.h包含在functions.h和dag.h中functions.h包含在basic.cpp,br.cpp,IR.cpp和UIR.cpp中functions.h... 查看详情

kdevelop:编辑 CMakeLists.txt

】kdevelop:编辑CMakeLists.txt【英文标题】:kdevelop:editingCMakeLists.txt【发布时间】:2010-07-2015:29:05【问题描述】:我在尝试使我的项目与kdevelop一起工作时遇到了麻烦。在CMakeLists.txt中,我包含了我使用的库的路径:cmake_minimum_required... 查看详情

子目录中的“无法确定目标的链接语言...”问题

...:45:04【问题描述】:在我的项目的主文件夹中,我有一个CMakeLists.txt文件。在这个文件中,我包含(使用add_subdirectory)另一个位于我的头文件目录中的CMakeLists.txt文件。第 查看详情

cmakelists.txt(代码片段)

示例(在编写CMakeLists.txt前,创建好src,include,lib,bin,build目录,其中cmake..在build目录中执行)#一般都会先声明cmake的版本CMAKE_MINIMUM_REQUIRED(VERSION2.8)PROJECT(hello_world)#Release和DebugIF(NOTCMAKE_BUILD_TYPE)SET(CMAKE_BUILD_TYP 查看详情

怎么在cmake的配置文件里加入

在CMakeLists.txt中加入set(CMAKE_EXE_LINKER_FLAGS"-lpthread-lrt"),解决问题。参考技术A1,依赖CMakeLists.txt文件,项目主目标一个,主目录中可指定包含的子目录;2,在项目CMakeLists.txt中使用project指定项目名称,add_subdirectory添加子目录3,子... 查看详情

更改 CLion 中的默认 CMakeLists.txt 以包含警告

】更改CLion中的默认CMakeLists.txt以包含警告【英文标题】:ChangedefaultCMakeLists.txtinCLiontoincludewarnings【发布时间】:2015-07-2822:36:48【问题描述】:在CLion中,默认的CMakeLists.txt仅设置C++11编译器标志。我希望在我的所有项目中默认都... 查看详情

将 Makefile 转换为 CMakeLists.txt

】将Makefile转换为CMakeLists.txt【英文标题】:ConvertingMakefiletoCMakeLists.txt【发布时间】:2013-08-0422:30:57【问题描述】:我正在使用具有自己的库的开发板。我已经在上面安装了ROS,现在我需要通过将其库包含到包的CMakeLists.txt中来... 查看详情

ros中的cmakelists.txt

在ROS的编程过程中,如果CMakeLists.txt如果写不好,编译就很难成功。如果看不懂CMakeLists.txt那么很多错误你也不知道时什么回事。所以深入了解它是很有必要的。现在我们就来看看它。我们使用cmake进行程序编译的时候,会根据CMa... 查看详情

如何在 nvidia Nsight eclipse 中使用 GNU 科学库 (gsl)

...ighteclipse中)我已经安装了gsl,现在我应该在eclipse中设置链接器设置。我已尝试按照概述的 查看详情

如何在 CMakeLists.txt 中集成 tesseract-ocr 库?

】如何在CMakeLists.txt中集成tesseract-ocr库?【英文标题】:Howtointegratetesseract-ocrlibraryinaCMakeLists.txt?【发布时间】:2014-09-2105:32:21【问题描述】:我不知道如何将tesseract-ocr库集成到我的ros项目中,我使用qtcreator进行编码并且该库已... 查看详情

自动生成 cmakelists.txt 的 C++ IDE

】自动生成cmakelists.txt的C++IDE【英文标题】:C++IDEthatautogeneratescmakelists.txt【发布时间】:2011-09-0622:29:22【问题描述】:我正在寻找能够从项目中自动生成cmake文件的IDE。理想情况下,我希望项目独立于IDE。我主要在linux下工作,... 查看详情

CLion 中的嵌套 CMakeLists.txt 文件

】CLion中的嵌套CMakeLists.txt文件【英文标题】:NestedCMakeLists.txtfilesinCLion【发布时间】:2020-10-2817:34:26【问题描述】:使用CLion,我的项目结构如下所示:您会看到在根目录中有一个include目录、一个src目录、一个lib目录、一个cmake-... 查看详情

CMake 从 CMakeLists.txt 脚本中获取缓存变量列表

】CMake从CMakeLists.txt脚本中获取缓存变量列表【英文标题】:CMakegetacachevariableslistfrominsideaCMakeLists.txtscript【发布时间】:2021-11-0522:38:27【问题描述】:我想知道是否有办法从CMakeLists.txt脚本中获取缓存变量列表。我的意思是,有... 查看详情

如何设置环境变量以便NDK中的CMakelists.txt可以访问?

】如何设置环境变量以便NDK中的CMakelists.txt可以访问?【英文标题】:HowtosetenvironmentvariablesothatCMakelists.txtfromNDKcanaccess?【发布时间】:2021-11-2720:59:01【问题描述】:在使用NDK构建Android应用程序时,我需要设置一个环境变量,以... 查看详情

Makefile 到 CMakeLists.txt

】Makefile到CMakeLists.txt【英文标题】:MakefiletoCMakeLists.txt【发布时间】:2010-04-2220:32:54【问题描述】:我在将附加的Makefile转换为等效的CMakeLists.txt时遇到一些问题。构建过程是这样的:在给定src/lexer.l.cpp的情况下使用flex生成src/le... 查看详情