C++ 编译简单windows二进制文件的简易方法

C++ 编译简单windows二进制文件的简易方法,c++,c,C++,C,因为我第三次失败了,也许你们中的某个人可以回答我这个(简单?)问题 我正在寻找一种最简单的方法来创建一个exe二进制文件,它只包含一些C/C++(或任何其他)代码行,并且不依赖于任何在每个Windows系统上都不可用的dll。因此,没有cygwin DLL,没有.NET可再发行文件,并且可以在XP->Windows10中工作。文件大小应尽可能小 谢谢。如果我正确理解了这个问题,您不太关心文件大小,但不关心是否依赖第三方DLL?然后,您可以始终静态链接库(当然,您需要将它们作为一个名为lib.a的

因为我第三次失败了,也许你们中的某个人可以回答我这个(简单?)问题

我正在寻找一种最简单的方法来创建一个exe二进制文件,它只包含一些C/C++(或任何其他)代码行,并且不依赖于任何在每个Windows系统上都不可用的dll。因此,没有cygwin DLL,没有.NET可再发行文件,并且可以在XP->Windows10中工作。文件大小应尽可能小


谢谢。

如果我正确理解了这个问题,您不太关心文件大小,但不关心是否依赖第三方DLL?然后,您可以始终静态链接库(当然,您需要将它们作为一个名为lib.a的归档文件)。例如,我在使用pdcurses库的windows游戏构建中使用了以下内容:

在为windows编译时,我的Makefile只是在链接阶段将其添加到
gcc
的标志中

-静态libgcc
可能是最重要的,因为libgcc(几乎)总是需要并自动链接。。。默认情况下是动态链接它


-Wl
将选项从
gcc
传递到链接器(
ld
-Bstatic
告诉链接器应静态链接以下LIB。我在这里切换回动态链接,因为
winmm.dll
是一个windows系统dll。

您需要Win32 API(无MFC)。例如,可以使用VisualC++快件。为运行库启用“多线程”非常重要(没有DLL)。这是在C++/代码生成设置中。使用旧的编译器,如VC 6或Borland C++ 5,你的EXE将在Windows 95和以上所有窗口上运行,没有问题。

这很难!!!几乎所有链接器(以及IDE)中都有一个选项,告诉链接器不要链接任何标准库。然后,您可以手动添加本机WIN32 API所需的库。缺点是不能使用任何CRT或标准C或C++功能,只使用纯Win32 API函数。它会使你的可执行文件变小吗?对它会引人注目吗?仅仅为什么它几乎不引人注目?因为大部分内容都在DLL中,而不是在可执行文件中。我推荐它吗?不,不是真的。“没有DLL”和“尽可能小”不住在同一个城市。我想你误解了DLL的概念。我们的想法是在运行时加载库,所以如果您决定使用基于DLL的框架,您需要保持这种约定。感谢所有的否决票。也许我的问题不够精确。通过不同编译软件的反复尝试,我发现了一些合适的东西,MinGW提供了一个占用空间很小的dll。谢谢你的回答。所以我的在线可执行文件是250kb,这对我来说没关系。好主意,我可以试试这个:)
csnake_win32_LDFLAGS:= -static-libgcc -Wl,-Bstatic -lpdcurses \
    -Wl,-Bdynamic -lwinmm