Windows下用Intel编译器编译Boost::multiprecision示例失败求助
解决Boost multiprecision float128在Intel Compiler 17.0.6 + VS2017下的标识符未定义问题
你碰到的其实是Boost版本与Intel Compiler版本的兼容性小坑——Boost 1.66对Intel Compiler 17的128位浮点函数支持细节没跟上,导致fmaq、remquoq、remainderq这几个关键函数的声明缺失。下面给你一步步的解决办法:
1. 补全必要的预处理器宏
Intel Compiler处理128位浮点时,需要特定宏来启用相关函数支持。你得在项目设置里添加这些预处理器定义:
__INTEL_COMPILER=1700(对应你的17.0.6主版本号)BOOST_MP_USE_FLOAT128__MMX__、__SSE__、__SSE2__(确保SIMD指令集启用,Intel Compiler默认可能开启,但手动添加更稳妥)
操作路径:VS2017右键项目→属性→C/C++→预处理器→预处理器定义,把上述宏添加进去。
2. 手动引入Intel的128位浮点函数头文件
如果加了宏还是报错,那是Boost 1.66的float128.hpp没正确包含Intel的函数声明。你可以在包含Boost头文件之前,先引入Intel的专用头文件:
#include <immintrin.h> // Intel SIMD核心头文件,包含部分128位浮点基础函数 #include <mathimf.h> // Intel数学扩展头文件,fmaq等函数的声明在这里 // 万一还有缺失,手动补充函数声明(适配Intel Compiler的语法) extern "C" { __float128 fmaq(__float128 a, __float128 b, __float128 c); __float128 remquoq(__float128 x, __float128 y, int* quo); __float128 remainderq(__float128 x, __float128 y); } #include <boost/multiprecision/float128.hpp>
3. 确认编译器与编译选项设置
- 确保项目用的是Intel Compiler而非MSVC:顶部菜单栏→工具→选项→Intel Compiler,选择使用Intel C++ Compiler 17.0;右键项目→属性→常规→平台工具集,选
Intel C++ Compiler 17.0。 - 开启128位浮点支持:C/C++→命令行,添加
/Qpc80选项(确保浮点精度配置正确)。
4. 升级Boost版本(可选但推荐)
Boost 1.66是比较老的版本了,后续的1.70+版本对Intel Compiler 17的兼容性做了不少修复。如果能把Boost升级到1.70或更高,这些问题大概率直接就消失了,能省不少折腾的功夫。
内容的提问来源于stack exchange,提问作者Starlin
相关产品推荐
相关产品推荐

