Closed zhangshuangjun closed 1 year ago
感谢反馈。问题的原因是,构建脚本错误的使用 excel 的LOOKUP
来确定ucrt函数是否在msvcrt中。
由于此函数是模糊匹配,这会导致 tanh 匹配 tanhf,_ftime匹配_ftime32等情况发生。这使我错误的认为这些ucrt函数在msvcrt中是存在的,然后引入了错误的函数导入。
问题影响较低。只影响NT5.2 x64系统无法运行目标平台为5.2.3790.0 x64的编译产物。
其他目标平台由于msvcrt恰好拥有这些函数或者压根就没有相关函数直接被静态导入了,所以未能触发此问题。
无。只能等待VC-LTL发布新版本。
现在已经使用XLOOKUP
重新纠正函数搜索脚本,并且确认现在5.2.3790.0 x64目标中以下函数受到影响需要跟进解决:
; 调用tanh,这是它等效的double版本
tanhf
; 下面的时间相关函数使用weak转发到对应的VC6时代的无32后缀版本即可
_wutime32
_wctime32
_utime32
_time32
_mktime32
_localtime32
_gmtime32
_futime32
_ftime32
_ctime32
; 已经实现,调整编译条件,5.2.3790.0 x64重新编译即可
_set_controlfp
程序编译成64位,VC-LTL选择5.2.3790.0,msvcrt.dll缺少一些函数,导致程序运行不起来。 目前测试发现的有tanhf,_ftime32,_gmtime32,_localtime32,文件在这里。 https://github.com/zhangshuangjun/raw_files/blob/master/msvcrt_w2003_sp2_x64.zip
msvcrt_w2003_sp2_x64.zip