在另一台计算机上启动使用MinGW编译的Windows应用程序时发生库链接错误

Library link error when starting Windows application compiled with MinGW on another computer

本文关键字:应用程序 Windows 编译 错误 链接 MinGW 一台 启动 计算机      更新时间:2023-10-16

我编写了一个简单的HelloWorld控制台应用程序,并使用以下命令之一在Windows 7上使用MinGW编译器进行编译:

gcc -Wall -pedantic Hello.c -o Hello.exe
g++ -Wall -pedantic Hello.cpp -o Hello.exe

然而,编译器将一些自己的动态库链接到应用程序中,当我将可执行文件复制到另一台没有安装MinGW的Windows 7计算机中时,我会出现库丢失错误。在Linux上,这个问题可以通过软件包系统来解决,它会自动安装所有需要的库,但在Windows中,你肯定不想让用户安装MinGW来运行你的程序。

所以我的问题是:我如何正确地链接所有库,我还需要做什么才能使我的应用程序独立运行?

尽管我相信,这一定是所有Windows程序员的一个根本问题,但我一直无法在互联网上找到任何答案(也许我只是不知道如何搜索以及搜索什么)。

它在某个阶段的常见问题解答中,但现在我似乎只在这个页面上找到它:

为什么我在运行程序时会收到一个关于缺少libstdc++-6.dll文件的错误?

GCC4默认情况下动态链接到libgcc和libstdc++库这意味着您需要libgcc_s_dw2-1.dll的副本,并且libstdc++-6.dll文件来运行使用GCC4版本构建的程序(这些文件可以在MinGW\bin目录中找到)。删除这些DLL依赖项,通过以下方式将库静态链接到应用程序将"-static-libgcc-static-libstdc++"添加到您的"额外链接"选项"。

试试这个,

g++ -static-libgcc -static-libstdc++ -Wall -pedantic Hello.cpp -o Hello.exe

我恐怕要说,在我的机器上安装了所有应用程序后,很容易识别哪些应用程序是用MinGW构建的。标志是一个装满图书馆的文件夹。

检查所需的库是否可分发,然后简单地将它们包含在.exe目录中。

尽管您可能在用户的计算机上安装了其他应用程序,并且其中一些应用程序可能包含您需要的库,但您的应用程序很可能与它们不兼容。这就是为什么要求用户安装MinGW无论如何都不太可能奏效的原因。