构建 Windows 通用 C 运行时

问题描述 投票:0回答:1

我正在尝试构建 Windows 10 SDK 附带的通用 C 运行时。

我创建了一个项目并从此目录添加了源代码:

%ProgramFiles(x86)%\Windows 工具包\源.0.16299.0\ucrt

我遇到了错误。我跟踪并修复了错误的踪迹。但最终我收到了有关重载函数和丢失标头的错误,这些错误在我的计算机上似乎不存在:

(ClCompile target) ->
  C:\Program Files (x86)\Windows Kits\10\Source\10.0.16299.0\ucrt\inc\corecrt_internal.h(102): error C2556: '__crt_stat
e_management::dual_state_global<int> *__p__fmode(void)': overloaded function differs only by return type from 'int *__p
__fmode(void)' [C:\src\ucrt\build\time.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Source\10.0.16299.0\ucrt\inc\corecrt_internal.h(102): error C2371: '__p__fmode
': redefinition; different basic types [C:\src\ucrt\build\time.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Source\10.0.16299.0\ucrt\inc\corecrt_internal.h(1920): fatal error C1083: Cann
ot open include file: 'corecrt_internal_state_isolation.h': No such file or directory [C:\src\ucrt\build\ti
me.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Source\10.0.16299.0\ucrt\inc\corecrt_internal.h(102): error C2556: '__crt_stat
e_management::dual_state_global<int> *__p__fmode(void)': overloaded function differs only by return type from 'int *__p
__fmode(void)' [C:\src\ucrt\build\time.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Source\10.0.16299.0\ucrt\inc\corecrt_internal.h(102): error C2371: '__p__fmode
': redefinition; different basic types [C:\src\ucrt\build\time.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Source\10.0.16299.0\ucrt\inc\corecrt_internal.h(1920): fatal error C1083: Cann
ot open include file: 'corecrt_internal_state_isolation.h': No such file or directory [C:\src\ucrt\build\ti
me.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Source\10.0.16299.0\ucrt\inc\corecrt_internal.h(102): error C2556: '__crt_stat
e_management::dual_state_global<int> *__p__fmode(void)': overloaded function differs only by return type from 'int *__p
__fmode(void)' [C:\src\ucrt\build\time.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Source\10.0.16299.0\ucrt\inc\corecrt_internal.h(102): error C2371: '__p__fmode
': redefinition; different basic types [C:\src\ucrt\build\time.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Source\10.0.16299.0\ucrt\inc\corecrt_internal.h(1920): fatal error C1083: Cann
ot open include file: 'corecrt_internal_state_isolation.h': No such file or directory [C:\src\ucrt\build\ti
me.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Source\10.0.16299.0\ucrt\inc\corecrt_internal.h(102): error C2556: '__crt_stat
e_management::dual_state_global<int> *__p__fmode(void)': overloaded function differs only by return type from 'int *__p
__fmode(void)' [C:\src\ucrt\build\time.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Source\10.0.16299.0\ucrt\inc\corecrt_internal.h(102): error C2371: '__p__fmode
': redefinition; different basic types [C:\src\ucrt\build\time.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Source\10.0.16299.0\ucrt\inc\corecrt_internal.h(1920): fatal error C1083: Cann
ot open include file: 'corecrt_internal_state_isolation.h': No such file or directory [C:\src\ucrt\build\ti
me.vcxproj]
  C:\Program Files (x86)\Windows Kits\10\Source\10.0.16299.0\ucrt\inc\corecrt_internal.h(102): error C2556: '__crt_stat
e_management::dual_state_global<int> *__p__fmode(void)': overloaded function differs only by return type from 'int *__p
__fmode(void)' [C:\src\ucrt\build\time.vcxproj]
...

我找不到任何有关构建通用 C 运行时的文档。

我是不是走错了路?任何建议表示赞赏。

c++ crt
1个回答
0
投票

2024 年更新:GitHub 上的某人似乎已经制定了使 UCRT 在 Microsoft 之外构建所需的更改,请参阅存储库

huangqinjin/ucrt
。必要的更改已合并在 2024 年 5 月 PR 中,包括重新实现缺失的
corecrt_internal_state_isolation.h
标头。相关消息中,微软已经在 MIT 许可下发布了 UCRT 源码。


在旧版本中,Microsoft 提供了完整的 C 运行时源,并且可以自己重建它。但是,在最新版本中,Microsoft 取消了对在 Microsoft 外部重建它的支持(source)。他们做到这一点的部分方法是不发送构建它所需的某些关键文件,例如

corecrt_internal_state_isolation.h
(正如您所发现的)。

如果您只想更改一个特定文件,您也许可以(通过一些黑客手段)重新编译该文件 - 请参阅此博客文章了解示例。

理论上,人们可以通过反复试验、智能猜测,甚至可能对二进制文件进行一些逆向工程,构建出与任何丢失文件(包括

corecrt_internal_state_isolation.h
)功能等效的东西。这将是一项艰巨的工作,但也许有一天有人会被这个挑战所吸引。

© www.soinside.com 2019 - 2024. All rights reserved.