使用 CodeBlocks + GCC 构建的可执行文件可以在任何 Windows 上运行吗?
Posted
技术标签:
【中文标题】使用 CodeBlocks + GCC 构建的可执行文件可以在任何 Windows 上运行吗?【英文标题】:Do executables built with CodeBlocks + GCC run on any Windows? 【发布时间】:2017-07-08 22:30:20 【问题描述】:在使用 Visual C++ 构建时,我注意到一个简单的可执行文件 helloworld.exe
(显示 WinAPI MessageBox
)可以传送到任何使用 Windows XP、Vista、7、8、10 的计算机上,并将运行 没有任何第三方 dll 或可再分发包。
现在我正在转向 CodeBlocks + GCC,是否也是如此?即显示 WinAPI MessageBox
的简单可执行文件是否能够在所有 Win XP、Vista、7、8、10 上运行而无需任何其他特定于 GCC 的软件包?
【问题讨论】:
未来的读者应该注意,默认情况下,Visual C++ 将生成一个需要可再发行包的可执行文件。当然,您可以将其配置为生成独立的可执行文件,但这不是默认行为。 @HarryJohnston 确实有用的信息! VC++中生成独立可执行文件(哪个菜单/子菜单)的设置在哪里? 对于纯 C,它是“代码生成”下的“运行时库”设置。我不确定 STL。 【参考方案1】:与所有程序一样,包括那些使用 VS 构建的程序,保证程序可以在所有这些 Windows 版本上运行并非易事。但是,是的,您通常可以使用 GCC 编写控制台应用程序,无需任何第三方 DLL 即可在它们之间运行——我自己的 CSVfix 应用程序当然可以。你当然可以使用 GCC 来显示一个没有这些东西的消息框。我会推荐使用TDM GCC,它的一个版本带有一个 Code::Blocks 包,作为做这种事情的最直接的方法。
【讨论】:
我使用了默认的 MinGW 编译器shipped with CodeBlocks:codeblocks-16.01mingw-setup.exe。通常,对于命令行应用程序或基本 GUI 应用程序(不使用 GTK 或 wxWidgets),是否没有mingw.dll
、gcc.dll
或类似的东西要发布?
不,没有。【参考方案2】:
我以前用来确保所有内容都正确链接的方法是在编译时通过传递 -static 标志进行静态链接。
在 g++ 中会是这样的:g++ hello.cpp -o hello.exe -static
。
那应该照顾它。这样你只需要没有libstdc++6.dll
的二进制文件。因此,如果您可以在 code::blocks 中传递链接器标志,请执行此操作。
【讨论】:
谢谢@Dimos。我们可以在哪里(哪个菜单)在 code::blocks 中设置它? @Basj like this 。我使用 Qt Creator,所以不确定这是多么准确/最新。【参考方案3】:我尝试了更多,使用 Code::blocks / GCC / MinGW 制作的 .exe 确实需要一个外部文件:libstdc++-6.dll
。
可能有一种方法可以使用静态链接的可执行文件as stated here 来消除这种依赖关系,但那里的一些 cmets 表明它并不像看起来那么容易。
【讨论】:
以上是关于使用 CodeBlocks + GCC 构建的可执行文件可以在任何 Windows 上运行吗?的主要内容,如果未能解决你的问题,请参考以下文章