【发布时间】:2017-01-28 19:38:48
【问题描述】:
我想使用 Visual Studio 编写一个不依赖 msvc dll 的 c++ win32 应用程序。
我尝试了/NODEFAULTLIB 选项,但之后我得到一个未解决的外部错误,即使是“空”程序,因为没有库。我该如何纠正?我有要链接哪些库?
这是我尝试使用/NODEFAULTLIB 选项编译但失败的简单代码。
#include <Windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow) {
}
【问题讨论】:
-
您可能在 IDE 中创建了错误的项目类型。您创建的项目类型是什么?
-
@NeilButterworth 我在 c++ 标签下创建了 Win32/Empty Win32 项目。
-
@RawN 这不仅仅是关于今天每个人至少有几 TB 的磁盘大小,而且为什么我不能这样做?
-
这样做只会让自己度过一段非常糟糕的时光。编译器生成 CRT 作用的代码和数据。这包括初始化和销毁全局对象、处理异常等。所有这些未解决的链接器错误都是您需要自己或在另一个库中提供的功能的一部分。由于您要替换的大多数内部结构都没有记录,因此您将很难同时进行这两项操作。
-
@SüleymanKenar - 是的,我在这方面拥有丰富的知识和丰富的经验。但是这对你来说是为了什么?从您的程序入口点
WinMain开始 - 谁必须调用它?!如果您不想使用CRT- 您的条目必须是void somefunc()并且需要将somefunc设置为exe 入口点。然后很多取决于您的 c++ 编译器选项(例如运行时检查等)以及您在代码中使用的功能。你准备好使用ntdllp.lib作为运行时(比如异常处理程序)吗?你需要有足够的知识和理由这样做
标签: c++ visual-studio winapi