c++ - 无论代码如何,MinGW .exe 都需要一些 gcc dll?

标签 c++ dll mingw

使用 MinGW 编译时,我必须在运行 exe 之前从 MinGW bin 目录中复制某些 dll 文件(即使使用“-static”和/或“-static-libstdc++”。) 我该如何改变呢?是否有我必须使用的特殊版本的 MinGW?最终,我希望能够在目录中除了 exe 之外什么都没有运行程序(并且没有设置 windows 环境变量。)这些文件是:

  • libstdc++-6.dll
  • libgcc_s_seh-1.dll
  • libwinpthread-1.dll

这是我休闲的步骤的完整列表:

  1. 打开代码:: block
  2. 选择“文件->新建->项目->控制台”
  3. 填写项目“Hello World”的项目设置
  4. 右键Project->Build Options...->Hello World (Root target)->Other Options
  5. 在已设置的“-fexceptions”下输入“-static”(或“-static-libstdc++”)
  6. CTRL-F9 : 构建项目(不执行)
  7. 在 Windows 资源管理器中导航到并运行构建的“Hello World.exe”文件。
  8. 当弹出消息“错误:您的计算机中缺少 libstdc++-6.dll”时,单击“确定”。
  9. 将“libstdc++-6.dll”从/MinGW/bin/目录复制到“Hello World.exe”目录中。
  10. 运行“Hello World.exe”
  11. 对于“错误:您的计算机缺少 libgcc_s_seh-1.dll”消息,单击“确定”。
  12. 将“libgcc_s_seh-1.dll”复制到“Hello World.exe”目录中。
  13. 重复并最终复制“libwinpthread-1.dll”。
  14. 查看消息

    Hello World!
    

编辑: 我的命令行是:

g++.exe -Wall -fexceptions -static -static-libgcc -static-libstdc++ -g -static-libgcc -static-libstdc++ -L. -c "C:\Users\______\Desktop\Hello World\main.cpp" -o obj\Debug\main.o
g++.exe -o "bin\Debug\Hello World.exe" obj\Debug\main.o

需要上面提到的所有 dll 文件。而且,为了安全起见,代码是:

// main.cpp
#include <iostream>

using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    return 0;
}

最佳答案

你的命令错了!

转到您的 main.cpp 文件所在的目录,然后尝试以下操作。

g++.exe -Wall -c -g main.cpp -o obj\Debug\main.o
g++.exe -static -static-libgcc -static-libstdc++ -o "bin\Debug\Hello World.exe" obj\Debug\main.o

那么您将不再需要复制 DLL(用于您的 Hello World 程序)。

其他说明:

MinGW安装说明推荐设置

c:\minGW;c:\MinGW\bin;

到 PATH 环境变量。

通常情况下

-static -static-libgcc -static-libstdc++

链接器选项应该可以工作(一次尝试所有 3 个)。但不适用于 libwinpthread-1.dll

另外,在重新编译之前尝试clean

没有“-static-something”命令。

只有标准库libgcclibstdc++可以设置为静态链接。

对于其他库,您首先使用“-static”切换到静态链接,然后使用单独的命令列出要包含的库,即“-lpthread”。

Cmake 用户应尝试添加:

set(CMAKE_CXX_STANDARD_LIBRARIES "-static-libgcc -static-libstdc++ -lwsock32 -lws2_32 ${CMAKE_CXX_STANDARD_LIBRARIES}")

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive")

关于c++ - 无论代码如何,MinGW .exe 都需要一些 gcc dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18138635/

相关文章:

c++ - 没有构造函数的实例与参数列表匹配——参数类型是 :

c++ - Mysql 查询字符串在查询 C++ 中不起作用

c++ - 运行使用 MinGW 构建的可执行文件时出现缺少 msvcr100.dll 错误

gcc - 如何手动安装mingw?

Java - jni4net Bridge - 使用 dll 依赖项部署 Jar

windows - 如何在 Windows 中使用 pip+mingw 安装 numpy?

c++ - 为什么存储在数组中的 double 值会消失?

c++ - 具有编译时间常数的虚函数

c# - 将字节数组从 C dll 返回到 C#

assembly - 在不使用相关性的情况下直接在 ASM 中调用/跳转(x86)