You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake已找到GSL库但C++代码无法引入头文件的问题

解决CMake检测到GSL但编译时找不到头文件的问题

问题概述

在Ubuntu 22.04上通过sudo apt-get install libgsl-dev安装了GSL 2.7.1,CMake执行时显示-- Found GSL: /usr/include (found version "2.7.1"),但编译时提示gsl/gsl_sf_bessel.h: No such file or directory。编译使用的是conda环境中的C++编译器。

问题原因

从终端日志可看到,当前使用的是conda环境下的编译器(/home/iii/miniconda3/envs/tf/bin/x86_64-conda-linux-gnu-c++),而conda编译器默认不会搜索系统级的/usr/include目录——即便CMake找到了GSL的位置,编译阶段依然无法定位到头文件。

解决方案

方案1:修正CMakeLists.txt(推荐)

使用CMake的现代导入目标特性,让目标自动获取GSL的头文件路径和链接库。修改后的CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.5.1)
project(mujoco_gym)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")

find_package(GSL REQUIRED)

include_directories(${PROJECT_SOURCE_DIR})

file(GLOB SOURCE_FILES mujoco_gym.cpp)

add_executable(${CMAKE_PROJECT_NAME} ${SOURCE_FILES})

# 用GSL的导入目标,自动处理头文件包含和库链接
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE GSL::gsl GSL::gslcblas)

修改后重新执行编译流程:

rm -rf build && mkdir build && cd build
cmake ..
cmake --build . --config Release

方案2:指定系统头文件路径给conda编译器

若不想修改CMakeLists,可在运行cmake时显式添加系统头文件目录:

rm -rf build && mkdir build && cd build
cmake .. -DCMAKE_CXX_FLAGS="-I/usr/include"
cmake --build . --config Release

方案3:临时退出conda环境

直接使用系统默认的GCC编译器,它会自动搜索/usr/include:

conda deactivate
rm -rf build && mkdir build && cd build
cmake ..
cmake --build . --config Release

验证

编译成功后,运行生成的可执行文件:

./mujoco_gym

将输出贝塞尔函数的计算结果。

内容的提问来源于stack exchange,提问作者Ant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:39:15