Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

5.2.3790.0编译目标在Windows Server 2003 x64上无法运行 #45

Closed
zhangshuangjun opened this issue Apr 3, 2023 · 2 comments
Closed
Labels
类型:问题(Bug) Something isn't working 处置:完成(Done) 影响范围:低 这个问题不会造成真正的体验问题,可以暂缓解决。

Comments

@zhangshuangjun
Copy link

zhangshuangjun commented Apr 3, 2023

程序编译成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

@mingkuang-Chuyu mingkuang-Chuyu added 类型:问题(Bug) Something isn't working 处置:正在讨论(Review) 我们正在讨论如何解决,怎么实现更好。 影响范围:低 这个问题不会造成真正的体验问题,可以暂缓解决。 labels Apr 4, 2023
@mingkuang-Chuyu
Copy link
Collaborator

mingkuang-Chuyu commented Apr 4, 2023

感谢反馈。问题的原因是,构建脚本错误的使用 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

@mingkuang-Chuyu mingkuang-Chuyu changed the title Windows Server 2003 X64跑不起来 5.2.3790.0编译目标在Windows Server 2003 x64上无法运行 Apr 4, 2023
@mingkuang-Chuyu mingkuang-Chuyu added 处置:等待发布(Publishing) 问题已经解决,等待新版本发布。 and removed 处置:正在讨论(Review) 我们正在讨论如何解决,怎么实现更好。 labels Apr 4, 2023
@mingkuang-Chuyu
Copy link
Collaborator

@mingkuang-Chuyu mingkuang-Chuyu added 处置:完成(Done) and removed 处置:等待发布(Publishing) 问题已经解决,等待新版本发布。 labels Apr 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
类型:问题(Bug) Something isn't working 处置:完成(Done) 影响范围:低 这个问题不会造成真正的体验问题,可以暂缓解决。
Projects
None yet
Development

No branches or pull requests

2 participants