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

为MD/MDd提供一致性的体验 #64

Open
mingkuang-Chuyu opened this issue May 4, 2024 · 0 comments
Open

为MD/MDd提供一致性的体验 #64

mingkuang-Chuyu opened this issue May 4, 2024 · 0 comments
Labels
类型:新功能/建议(enhancement) New feature or request 处置:正在讨论(Review) 我们正在讨论如何解决,怎么实现更好。 影响范围:低 这个问题不会造成真正的体验问题,可以暂缓解决。

Comments

@mingkuang-Chuyu
Copy link
Collaborator

mingkuang-Chuyu commented May 4, 2024

背景

很多用户或许会疑问,如果编译时选择5.1兼容,但是使用MD编译。这时程序会怎么样,真的会兼容XP吗?需要额外依赖什么库?

从用户角度说使用 MD/MDd,额外依赖某些动态库是合理的。从技术角度做到不依赖动态库也不是特别容易。
这看起来没有问题,但是使用微软的动态库无法提供XP兼容,这违背用户使用VC-LTL的初衷。

因此我们希望重新调整MD/MDd下的使用体验。初步认为需要实现2点:

  1. 使用MD/MDd后将额外依赖某些动态库。用户需要为程序准备运行库后才能正常运行。
  2. 使用MD/MDd后任然可以兼容XP等系统,符合用户的预期。

技术方案构想

  • 使用 MD/MDd直接依赖ucrtbase.dll(就是统一废除MSVCRT.dll)
    • 这样 既将兼容标准对其微软,同时也完全兼容微软的DLL,大家可以在非必要的场景直接使用微软的。
  • 我们提供ucrtbase.dll那一套DLL统一支持到Windows XP RTM
  • 与微软原版相比,我们的不依赖API Sets
    • 这样用户侧兼容老系统时可以不必带那一堆api-ms-win- 开头的dll,同时也能减少一些导入表体积。

依赖结构如下:

初步计划中,除了砍掉API Sets与vcruntime相关DLL,其他结构与微软一模一样。

stateDiagram
direction LR
state VCRT/UCRT
{
  vcruntime[d].lib --> ucrtbase.dll
  ucrt[d].lib --> ucrtbase.dll
}

state CppRuntime
{
  msvcprt[d].lib --> msvcp140.dll
  msvcprt[d].lib --> msvcp140_1.dll
  msvcprt[d].lib --> msvcp140_2.dll
  msvcprt[d].lib --> msvcp140_atomic_wait.dll
  msvcprt[d].lib --> msvcp140_codecvt_ids.dll
}
CppRuntime --> VCRT/UCRT

state ConcRT
{
    concrt[d].lib --> concrt140.dll
}

ConcRT --> VCRT/UCRT
ConcRT --> CppRuntime

state WinRT
{
  vccorlib[d].lib --> wincorlib.dll
}

state MFC
{
  mfc140.dll
  mfc140u.dll
  mfcm140.dll
  mfcm140u.dll
}

MFC --> VCRT/UCRT
MFC --> CppRuntime

state AMP/OPENMP
{
  vcamp140.dll
  vcomp140.dll
}

AMP/OPENMP --> VCRT/UCRT
Loading
@mingkuang-Chuyu mingkuang-Chuyu added 类型:新功能/建议(enhancement) New feature or request 处置:正在讨论(Review) 我们正在讨论如何解决,怎么实现更好。 影响范围:低 这个问题不会造成真正的体验问题,可以暂缓解决。 labels May 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
类型:新功能/建议(enhancement) New feature or request 处置:正在讨论(Review) 我们正在讨论如何解决,怎么实现更好。 影响范围:低 这个问题不会造成真正的体验问题,可以暂缓解决。
Projects
None yet
Development

No branches or pull requests

1 participant