Clang14+CMake编译Boost float128时提示'quadmath.h'未找到
解决Boost float128编译找不到quadmath.h的问题
1. 先安装依赖开发包
系统中仅存在libquadmath.a库文件是不够的,quadmath.h头文件需要单独安装开发包:
sudo apt update && sudo apt install libquadmath-dev
2. 调整CMake配置
你之前只处理了库文件的查找,缺少头文件路径的配置,需要同时指定头文件目录和链接库。在你的CMakeLists.txt中添加以下内容:
# 查找quadmath头文件 find_path(QUADMATH_INCLUDE_DIR quadmath.h) # 查找quadmath库文件 find_library(QUADMATH_LIBRARY NAMES quadmath) # 校验依赖是否找到 if(NOT QUADMATH_INCLUDE_DIR OR NOT QUADMATH_LIBRARY) message(FATAL_ERROR "libquadmath依赖未找到,请先安装libquadmath-dev") endif() # 添加头文件包含路径 include_directories(${QUADMATH_INCLUDE_DIR}) # 将quadmath库链接到你的项目目标 target_link_libraries(你的项目目标名 PRIVATE ${QUADMATH_LIBRARY})
如果安装开发包后find_path仍无法定位头文件,可以手动指定GCC版本对应的路径(匹配你系统中libquadmath.a所在的目录):
find_path(QUADMATH_INCLUDE_DIR quadmath.h HINTS /usr/lib/gcc/x86_64-linux-gnu/11/include) find_library(QUADMATH_LIBRARY NAMES quadmath HINTS /usr/lib/gcc/x86_64-linux-gnu/11)
3. 关于GCC/Intel float128依赖的问题
这个问题直接相关。Boost.multiprecision的float128组件底层依赖GCC提供的__float128类型和libquadmath库(处理四精度浮点运算)。Clang本身在x86_64架构上支持__float128,但默认不会自动搜索GCC的libquadmath头文件和库路径,所以必须手动配置CMake指定这些路径,同时链接libquadmath库才能正常编译。
另外,确保项目编译标准至少为C++11(Boost.multiprecision的最低要求),可以在CMake中添加:
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON)
内容的提问来源于stack exchange,提问作者rare77
相关产品推荐
相关产品推荐

