gpt4 book ai didi

c++ - 在 CMakeLists.txt 中链接 GSL

转载 作者:行者123 更新时间:2023-12-01 17:56:46 35 4
gpt4 key购买 nike

我有一个包含多个文件的代码,它使用 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++ 很陌生,似乎无法在网上找到任何答案。谢谢

最佳答案

您尚未链接到 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() 方面的工作原理:

关于c++ - 在 CMakeLists.txt 中链接 GSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44821615/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com