如何制作一个不依赖msvc dll的win32应用程序? < >我想用VisualStudio./P>对没有MSVC DLL依赖的C++ Win32应用程序进行编码。
我尝试了如何制作一个不依赖msvc dll的win32应用程序? < >我想用VisualStudio./P>对没有MSVC DLL依赖的C++ Win32应用程序进行编码。,c++,visual-studio,winapi,C++,Visual Studio,Winapi,我尝试了/NODEFAULTLIB选项,但之后由于没有库,即使使用“空”程序,也会出现未解决的外部错误。我怎样才能纠正这个问题?我必须链接哪些库 下面是我试图用/NODEFAULTLIB选项编译的一段简单代码,但失败了 #include <Windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow) { } #包括 int WI
/NODEFAULTLIB
选项,但之后由于没有库,即使使用“空”程序,也会出现未解决的外部错误。我怎样才能纠正这个问题?我必须链接哪些库
下面是我试图用/NODEFAULTLIB
选项编译的一段简单代码,但失败了
#include <Windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow) {
}
#包括
int WINAPI WinMain(HINSTANCE HINSTANCE、HINSTANCE hPrevInstance、LPSTR szCmdLine、int iCmdShow){
}
#未定义UNICODE
#定义UNICODE
#包括
无效启动()
{
消息框(0,L“请单击确定按钮”,L“嗨!”,MB_设置前景);
退出过程(0);
}
[C:\my\forums\so\279]
>cl minimal.cpp/link/nodefaultlib/entry:startup/subsystem:console kernel32.lib user32.lib
最小值.cpp
[C:\my\forums\so\279]
>迪尔
驱动器C中的卷是OS
卷序列号为58BC-07CA
C:\my\forums\so\279目录
28.01.2017 21:43 .
28.01.2017 21:43 ..
2017年1月28日21:43 215.cpp
28.01.2017 21:43 2 560 minimal.exe
2017年1月28日21:43 860.obj
3个文件3635字节
2个目录274 278 531 072字节可用
[C:\my\forums\so\279]
> _
<代码> Cl</Cl>是Visual C++编译器。我的默认选项(通过
CL
环境变量)是/nologo/EHsc/GR/W4/FI“iso646.h”
,但我相信只有异常处理选项会影响这里的任何东西,如果它全部影响的话。由于我使用了MessageBox
函数,因此链接了user32.lib
库
注意,运行时库负责C++核心语言的部分结构。这包括名称空间范围变量的动态初始化,并且根据编译器的不同,它可能包括一些对异常的支持。我不知道关于VisualC++的细节,但必须非常非常小心:一个是在一个机制中运行,在这个机制中,工具的基本假设不成立。 #定义UNICODE #包括 无效启动() { 消息框(0,L“请单击确定按钮”,L“嗨!”,MB_设置前景); 退出过程(0); } [C:\my\forums\so\279] >cl minimal.cpp/link/nodefaultlib/entry:startup/subsystem:console kernel32.lib user32.lib 最小值.cpp [C:\my\forums\so\279] >迪尔 驱动器C中的卷是OS 卷序列号为58BC-07CA C:\my\forums\so\279目录 28.01.2017 21:43 . 28.01.2017 21:43 .. 2017年1月28日21:43 215.cpp 28.01.2017 21:43 2 560 minimal.exe 2017年1月28日21:43 860.obj 3个文件3635字节 2个目录274 278 531 072字节可用 [C:\my\forums\so\279] > _
<代码> Cl</Cl>是Visual C++编译器。我的默认选项(通过
CL
环境变量)是/nologo/EHsc/GR/W4/FI“iso646.h”
,但我相信只有异常处理选项会影响这里的任何东西,如果它全部影响的话。由于我使用了MessageBox
函数,因此链接了user32.lib
库
注意,运行时库负责C++核心语言的部分结构。这包括名称空间范围变量的动态初始化,并且根据编译器的不同,它可能包括一些对异常的支持。我不知道Visual C++在这方面的细节,但必须非常非常小心:一个是在一个机制中运行,在这个机制中,工具的基本假设不成立。
您可能在IDE中创建了错误的项目类型。“NeilButterworth创建了什么项目类型?”@我在C++标签下创建了Win32/空Win32项目。@ RawN,它不仅是磁盘大小的问题,今天每个人至少有百万兆字节,但为什么我不能这么做?这样做只是让你自己处于一个非常糟糕的时间。编译器生成CRT作用的代码和数据。这包括初始化和销毁全局对象、处理异常等。所有这些未解决的链接器错误都是您自己或在另一个库中提供的功能的一部分。这两件事你都做得不好,因为你要替换的大多数内部构件都是没有文档记录的。@SüleymanKenar-是的,我在这方面有丰富的知识和经验。但这对你来说是什么?从程序入口点开始WinMain
-谁必须调用它?!如果不想使用CRT
,则输入必须是void somefunc()
,并且需要将somefunc
设置为exe输入点。然后,许多依赖于C++编译器选项(例如运行时检查等)以及代码中使用的特性。您是否准备好将ntdllp.lib
用作运行时(比如异常处理程序)?您需要有足够的知识和理由这样做您可能在IDE中创建了错误的项目类型。“NeilButterworth创建了什么项目类型?”@我在C++标签下创建了Win32/空Win32项目。@ RawN,它不仅是磁盘大小的问题,今天每个人至少有百万兆字节,但为什么我不能这么做?这样做只是让你自己处于一个非常糟糕的时间。编译器生成CRT作用的代码和数据。这包括初始化和销毁全局对象、处理异常等。所有这些未解决的链接器错误都是您自己或在另一个库中提供的功能的一部分。这两件事你都做得不好,因为你要替换的大多数内部构件都是没有文档记录的。@SüleymanKenar-是的,我在这方面有丰富的知识和经验。但这对你来说是什么?从程序入口点开始WinMain
-谁必须调用它?!如果您不想使用CRT
-您的输入必须是void somefunc()
,并且需要将somefunc
设置为执行项
#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]
> _