如何创建一个不依赖于msvc dll的win32应用程序?

时间:2017-01-28 19:38:49

标签: c++ visual-studio winapi

我想使用Visual Studio编写没有msvc dll依赖的c ++ win32应用程序。

我尝试了/NODEFAULTLIB选项,但之后我得到了一个未解决的外部错误,即使是"空"程序,因为没有库。我怎么能纠正这个?我链接哪些库?

这是一个简单的代码,我尝试使用/NODEFAULTLIB选项进行编译并失败。

#include <Windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow) {

}

1 个答案:

答案 0 :(得分:2)

#undef UNICODE
#define UNICODE
#include <windows.h>

void startup()
{
    MessageBox( 0, L"Click the OK button, please.", L"Hi!", MB_SETFOREGROUND );
    ExitProcess( 0 );
}
[C:\my\forums\so\279]
> cl minimal.cpp /link /nodefaultlib /entry:startup /subsystem:console kernel32.lib user32.lib
minimal.cpp

[C:\my\forums\so\279]
> dir
 Volume in drive C is OS
 Volume Serial Number is 58BC-07CA

 Directory of C:\my\forums\so\279

28.01.2017  21:43    <DIR>          .
28.01.2017  21:43    <DIR>          ..
28.01.2017  21:43               215 minimal.cpp
28.01.2017  21:43             2 560 minimal.exe
28.01.2017  21:43               860 minimal.obj
               3 File(s)          3 635 bytes
               2 Dir(s)  274 278 531 072 bytes free

[C:\my\forums\so\279]
> _

cl是Visual C ++编译器。我的默认选项(通过CL环境变量)是/nologo /EHsc /GR /W4 /FI "iso646.h",但我相信只有异常处理选项会影响这里的任何内容,如果全部的话。 user32.lib库已关联,因为我使用了MessageBox函数。

请注意,运行时库负责部分C ++核心语言基础结构。这包括命名空间作用域变量的动态初始化,并且根据编译器,它可能包括对异常的一些支持。在这方面我不知道有关Visual C ++的细节,但是必须非常非常小心:一个是在一个工具的基本假设的制度中运作,不适用。

相关问题