【问题标题】:Linking GSL using CMake, undefined symbols使用 CMake 链接 GSL,未定义的符号
【发布时间】:2021-09-01 13:24:48
【问题描述】:

我正在尝试使用 cmake 将 GSL 链接到我的 C++ 代码,并且在我尝试构建之前一切顺利。 CMakeLists.txt:

cmake_minimum_required(VERSION 3.9)

include_directories(${project_SOURCE_DIR}/src)
link_directories(${project_BINARY_DIR}/src)

FIND_PACKAGE(Boost COMPONENTS system filesystem unit_test_framework REQUIRED )
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )

find_package(GSL REQUIRED)

set(CMAKE_CXX_STANDARD 14)

set (lib_SOURCES
    ../src/file.h
    ../src/file.cpp
    # etc
     )

target_include_directories(project PRIVATE ${PROJECT_SOURCE_DIR} ${GSL_INCLUDE_DIR})

target_link_libraries(sigma OpenMP::OpenMP_CXX GSL::gsl GSL:gslcblas)

当我添加 #include <gsl/gsl_integration.h> 并从 C++ 中的库中调用某些内容时,例如一个 gsl_integration_workspace * w = gsl_integration_workspace_alloc (1000);,在make 我得到一个Undefined symbols for architecture x86_64:...,所以库没有链接,但我不知道为什么。 CMake 清楚地识别 GSL,但不喜欢它。

我正在使用通过自制软件安装的 Big Sur 11.3.1、GSL 2.6。

【问题讨论】:

  • GSL:gslcblas 也许它错过了一个“:”没有?
  • 在CMakeLists.txt 中显示没有负责编译和链接的add_library 或add_executable 调用。请发布正确代码(最好以minimal reproducible example的形式)和它导致的完整错误消息。

标签: c++ cmake gsl


【解决方案1】:

通过删除我的 CMakeCache.txt 文件并再次运行 cmake 来解决此问题。

我在准备最小的工作示例以回应 Tsyvarev 的评论时意识到了这一点。我希望这可以帮助某人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2014-03-19
    • 1970-01-01
    • 2014-12-26
    • 2015-12-16
    • 2010-09-17
    • 2013-10-01
    相关资源
    最近更新 更多