我想使用Visual Studio编写没有msvc dll依赖的c ++ win32应用程序。
我尝试了/NODEFAULTLIB
选项,但之后我得到了一个未解决的外部错误,即使是"空"程序,因为没有库。我怎么能纠正这个?我有链接哪些库?
这是一个简单的代码,我尝试使用/NODEFAULTLIB
选项进行编译并失败。
#include <Windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow) {
}
答案 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 ++的细节,但是必须非常非常小心:一个是在一个工具的基本假设的制度中运作,不适用。