最近项目的要计算浮点数据,为了调试方便,输出计算结果值到DEBUG信息,结果却出现 R6002 错误
Google了一下,MSDN上对于R6002的描述信息是:
------------------------------------------------------------------------------------------------------------------------
未链接必需的浮点库。
通过检查下面的可能原因进行修复
-
该程序通过选项(如 /FPi87,该选项要求有协处理器)被编译或链接,但该程序运行在一台未安装协处理器的计算机上。
-
printf_s 或 scanf_s 函数的格式字符串包含浮点格式规范,而该程序不包含任何浮点值或变量。
-
编译器仅当必要时才通过加载浮点支持以最小化程序大小。编译器无法检测到格式字符串中的浮点格式规范,因此编译器未加载必要的浮点例程。
-
使用浮点参数以符合浮点格式规范,或在程序的其他地方执行浮点赋值。该操作将导致加载浮点支持。
-
在由混合语言编写的程序中,当程序进行链接时在 FORTRAN 库之前指定了 C 库。重新链接并最后指定 C 库。
------------------------------------------------------------------------------------------------------------------------
也就是说出现该问题的原因有上面几种可能
1.没有指定该选项,这个原因不可能
2.虽然是用的_vscprintf,vsprintf_s,但是肯定包含浮点值了
3.经过分析这个是可能的原因,因为我的要输出浮点数的地方是在EXE里,而实际输出到DEBUG信息的函数是在一个程序核心库的DLL里,也就是调用_vscprintf,vsprintf_s的代码就是在DLL里面,而这个DLL里没有任何一行代码用到浮点运行,导致了编译器没有加载“浮点例程”
解决办法:
强制编译器为这个DLL加载“浮点例程”
1.找了半天,没找到有这个编译选项,如有哪位知道的告诉我一下
2.在DLL里写一行没实际用途的浮点运算代码: float a = 0.00f,编译器就会检测到需要浮点运算