Eigen 3.4编译报错找不到mpreal.h,如何配置MPFR C++依赖?
解决Eigen集成mpreal时的头文件缺失问题
问题原因
编译报错mpreal.h: No such file or directory,本质是CMake未将mpreal的头文件目录加入搜索路径,同时未正确处理mpreal依赖的MPFR底层库。
修复步骤
1. 添加mpreal头文件路径
mpreal是仅头文件库,需将你克隆的mpreal根目录添加到项目的头文件搜索路径中。假设mpreal存放在项目的third_party/mpreal目录,在CMakeLists.txt中添加:
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/third_party/mpreal)
如果mpreal已安装到系统标准路径(如/usr/include),可跳过此步骤。
2. 链接MPFR依赖库
mpreal底层依赖MPFR C库,需在CMake中查找并链接该库:
FIND_PACKAGE(MPFR REQUIRED) TARGET_LINK_LIBRARIES(momentspp PRIVATE ${MPFR_LIBRARIES}) INCLUDE_DIRECTORIES(${MPFR_INCLUDE_DIRS})
3. 完整CMake配置示例
将上述配置整合到项目的CMakeLists.txt中,核心片段如下:
# 定义项目目标 ADD_LIBRARY(momentspp src/Data.cpp src/SumStatsLibrary.cpp) # Eigen头文件路径(若系统未自动识别) INCLUDE_DIRECTORIES(/usr/include/eigen3) # 添加mpreal头文件路径 INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/third_party/mpreal) # 链接MPFR依赖库 FIND_PACKAGE(MPFR REQUIRED) TARGET_LINK_LIBRARIES(momentspp PRIVATE ${MPFR_LIBRARIES}) INCLUDE_DIRECTORIES(${MPFR_INCLUDE_DIRS})
4. 重新构建项目
删除旧的build目录,重新生成构建文件并编译:
rm -rf build && mkdir build && cd build cmake .. make
内容的提问来源于stack exchange,提问作者gvbarroso
相关产品推荐
相关产品推荐

