问题描述
我正在尝试使用 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。
解决方法
通过删除我的 CMakeCache.txt 文件并再次运行 cmake 来解决此问题。
我在准备最小的工作示例以响应 Tsyvarev 的评论时意识到这一点。我希望这可以帮助某人。