Windows平台下如何彻底摆脱ucrt?

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

我目前正在Windows平台下编写一个简单的C运行时,以更好地了解编译器/链接器的工作原理。

演示项目在这里:MarsCRT

我目前正在研究

strlen()
。这个函数看起来像这样:

// file: MarsString.c
size_t strlen(char* Char)
{
    size_t Length = 0;
    for(;Char[Length]; Length ++);
    return Length;
}

但是当我编译项目时

cl /c /GS- ./src/MarsEntry.c ./src/MarsIO.c ./src/MarsMalloc.c ./src/MarsPrintf.c ./src/MarsString.c
...plenty of warnings...
C:\Users\z\Project\Github\dev\marscrt\src\MarsCRT.h(41): error C2371: 'strlen': redefinition; different basic types
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\string.h(215): note: see declaration of 'strlen'
...

看来我没有正确摆脱默认的ucrt。 我检查了

cl.exe /help
,但没有找到我期望的答案。 所以我想知道如何在没有ucrt的情况下编译项目?

我尝试在 cl.exe 中添加

/X
作为标志,但该项目甚至找不到
<Windows.h>
。我还尝试了
/MD
/MT
编译器标志,但它们都没有按我的预期工作。

其实我可以添加像

mars_strlen()
这样的前缀来绕过ucrt重新定义,但这不是我想要的。

c windows crt
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.