背景:我正在处理msvc9上的一些遗留系统,并且浮点到int转换存在问题。如果没有为SSE编译,它会发出__ftol2_sse
指令,这是一个未定义的引用。
唯一可以抑制此问题的方法是使用/QIfist
选项执行内联转换,而不调用任何ftol()
。但是,这些内联转换具有不同的舍入算法,因此在与现有代码一起使用时会产生问题。那,他们发出不可抑制的'弃用'警告cl.exe stderr。
我的解决方法是:
// Declare a regular _ftol() function that is present.
long __cdecl _ftol(double);
// Define _ftol2_sse() to be the regular one.
long __cdecl _ftol2_sse(double f) { return _ftol(f); }
这很好用。但是,某些版本确实定义了_ftol2_sse
,在这种情况下,我会得到多个定义,并且在代码中弄清楚这一点很痛苦。
我希望从--wrap __ftol2_sse
执行类似ld
的操作,并覆盖所有构建的行为。在MSVC上有可能是这样吗?