Ubuntu 24.04下CMake链接GMP与MPFR库报错求助
解决Ubuntu 24.04下CMake无法找到GMP/MPFR库的问题
问题原因
你遇到的CMake错误是因为Ubuntu的libgmp-dev和libmpfr-dev包仅安装了库文件与头文件,并未提供CMake默认查找的包配置文件(如GMPConfig.cmake)。CMake默认优先使用CONFIG模式查找配置文件,找不到时才会尝试内置的Find模块,但你的场景中未自动触发模块查找流程。
解决方案
方案1:使用pkg-config定位库(推荐)
Debian/Ubuntu系开发包通常会提供pkg-config配置文件,可在CMake中直接利用:
修改你的CMakeLists.txt如下:
cmake_minimum_required(VERSION 3.29) project(find_gmp) set(CMAKE_CXX_STANDARD 20) # 先查找pkg-config工具 find_package(PkgConfig REQUIRED) # 通过pkg-config定位GMP和MPFR pkg_check_modules(GMP REQUIRED IMPORTED_TARGET gmp) pkg_check_modules(MPFR REQUIRED IMPORTED_TARGET mpfr) add_executable(find_gmp main.cpp) # 链接找到的库 target_link_libraries(find_gmp PRIVATE PkgConfig::GMP PkgConfig::MPFR)
方案2:强制使用CMake内置Find模块
CMake自带FindGMP.cmake和FindMPFR.cmake模块,可显式指定使用MODULE模式查找:
修改后的CMakeLists.txt:
cmake_minimum_required(VERSION 3.29) project(find_gmp) set(CMAKE_CXX_STANDARD 20) # 强制使用MODULE模式查找库 find_package(GMP REQUIRED MODULE) find_package(MPFR REQUIRED MODULE) add_executable(find_gmp main.cpp) # 链接库(支持导入目标的CMake版本) target_link_libraries(find_gmp PRIVATE GMP::GMP MPFR::MPFR)
若你的CMake版本不支持导入目标,可改用变量形式:
find_package(GMP REQUIRED MODULE) find_package(MPFR REQUIRED MODULE) include_directories(${GMP_INCLUDE_DIRS} ${MPFR_INCLUDE_DIRS}) target_link_libraries(find_gmp PRIVATE ${GMP_LIBRARIES} ${MPFR_LIBRARIES})
额外注意事项
- 确保已安装
cmake包:sudo apt install cmake - 若之前运行过CMake失败,需删除构建目录下的缓存文件(如
CMakeCache.txt),重新执行CMake命令。
内容的提问来源于stack exchange,提问作者FreddyMro
相关产品推荐
相关产品推荐

