在另一台计算机上启动使用MinGW编译的Windows应用程序时发生库链接错误
Library link error when starting Windows application compiled with MinGW on another computer
我编写了一个简单的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无论如何都不太可能奏效的原因。
- 如何从Windows应用程序输出到标准?
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 将 Crashpad 与 Windows Qt 应用程序集成
- 在 Windows/C++ 上使用多进程应用程序的高精度定时操作
- 将控制台应用程序直接输出到Visual Studio而不是外部Windows控制台中
- 是否有可能构建面向Linux和Windows的.Net Core C++ / CLI应用程序?
- 将通用Windows应用程序转换为VisualStudio 2019上的常规应用程序
- Windows 7 应用程序在未聚焦时运行速度较慢
- 通知 Windows 系统应用程序字体已被卸载/删除
- 在Linux上交叉编译Windows应用程序时如何链接到Winsock?
- C++应用程序缺少 winrt::Windows::Storage::Streams::D ataWriter
- Windows 和 Android 应用程序是否需要 SSL?
- 如何使用cmake和Visual Studio 2019编译简单的Windows应用程序?
- 我可以用C++/WinRT编写一个DLL,供windows桌面应用程序(而不是UWP)或Unity插件使用吗
- 如何在Windows窗体应用程序中打开txt文件并将行导入文本框
- OutputDebugString在Windows通用应用程序上的位置?以及如何从OutputDebugString捕获
- 我应该使用什么信号来终止/终止Windows上的应用程序
- 生成窗体的控制台应用程序(Windows窗体)
- 编译C++源以在Windows应用商店应用程序(Windows 8)中使用它们
- 如何知道进程是否为应用程序- Windows