基本上标题说明了一切;我想在用C ++编写代码时完全禁用CRT。
我希望能够在Win98以及所有其他的上运行exe。 只是简单的NATIVE C ++。
我使用的编译器是Visual Studio。但是,如果需要,我愿意改变。
答案 0 :(得分:3)
很有可能,但是有许多缺点所以我不推荐它(我不会进入它们)。
你有理由定位Win98吗?几乎没有人再使用它了。我建议使用Windows Vista +,但这完全取决于你。
首先,您需要禁用优化,将RT lib设置为MT,禁用安全检查(这将使您的应用程序不太安全!)等等。为此,请转到C / C ++设置并将/ Od / MT / GS-添加到命令行。 接下来转到代码生成并将启用C ++异常设置为否。 之后转到链接器并将/ NODEFAULTLIB添加到命令行。 最后,导航到Advanced并设置入口点。
之后,你很高兴去!
答案 1 :(得分:3)
您可以删除Microsoft提供的对CRT的所有引用,并将其替换为您自己的自定义轻量级CRT。这样做的说明有点冗长,并且很好地总结了这里附带的源代码:
https://www.codeproject.com/articles/15156/tiny-c-runtime-library
说明有点过时,但我设法让部分tlibc
在Visual Studio 2017和Windows 10上运行。除FILE
API之外的所有内容似乎都在编译和工作。要遵循的步骤的主旨是:
/NODEFAULTLIB
)此时,tilbc源编译并运行(没有过时的FILE部分)。
那就是说,OP的实际问题是非常不同的。 CRT不应归咎于错误.exe is not a valid win32 application
。在实际执行二进制代码之前很久就会发生此错误,其中包括在main()
/ winmain()
之前执行的CRT。最常见的情况是在x64
操作系统上尝试运行x86
二进制文件时。理论上,即使Visual Studio 2017工具链也可以构建适用于Windows 2000和Win98的应用程序,只要在包含<windows.h>
时使用正确的SDK版本标记。
即使在使用错误的SDK或编译器标志的情况下,报告的错误也是其他的 - 很可能是DLL加载失败或弹出错误读取&#34;程序的内容无法启动&#34; ,然后是兼容模式产品。
答案 2 :(得分:2)
您可以使用正确的项目设置静态链接C ++运行时,但即便如此,您最多也可以使用Windows XP。
您可以了解如何静态链接标准库here,但以防链接死亡:
在Visual Studio开发环境中设置此编译器选项
1)打开项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。
2)展开C / C ++文件夹。
3)选择代码生成属性页。
4)修改运行时库属性。
如果 真的 希望在Windows 98上运行它,那么您需要使用旧版本的Visual Studio并执行类似上述操作。
答案 3 :(得分:1)
指南 - 如何避免 Windows 上的 C/C++ 运行时:
答案 4 :(得分:0)
在不知道你需要做什么的情况下很难帮助,一般情况下你不能删除CRT,here's why:
这意味着如果没有CRT,您将无法同时使用stdio(除非您以后手动链接它),也无法在控制台中运行该应用程序。
一种可以删除CRT的方法是创建一个静态库,如果你不在其中链接外部库,那么这就像纯粹的本机C ++一样可能(好吧,一个目标文件更接近于navite) C ++而不是静态库)。
根据操作系统的不同,您可能甚至无法在没有CRT的情况下调用二进制内的函数(在Windows示例中)。因此,如果你只想避免二进制开销,最好的办法就是拥有一个静态/动态库,它可以链接到其他一些“启动器”或者只是动态调用(无论如何都需要一种检索入口点的方法)。
同样,如果你没有提供足够的细节,很难说出你需要什么。
编辑:
如果你需要在较旧的win98上运行,那么使用支持win98的编译器,并指定你想使用编译器标志为win98编译。