MinGW .exe需要几个gcc dll,不pipe代码如何?

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

  • 的libstdc ++ – 6.dll
  • libgcc_s_seh-1.DLL
  • libwinpthread-1.DLL

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

  1. 打开Code :: Blocks
  2. select“文件 – >新build – >项目 – >控制台”
  3. 填写项目“Hello World”的项目设置
  4. 右键点击Project-> Build Options …-> Hello World(Root target) – > Other Options
  5. 在已经设置的“-fexceptions”下input“-static”(或“-static-libstdc ++”
  6. CTRL-F9:生成项目(不执行)
  7. 在Windows资源pipe理器中导航到并运行内置的“Hello World.exe”文件。
  8. 点击“确定”时,popup一个消息说:“错误:libstdc ++ – 6.dll从您的计算机丢失。
  9. 从/ MinGW / bin /目录复制“libstdc ++ – 6.dll”到“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安装说明build议设置

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

到PATH环境variables。

通常情况下,

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

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

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

没有“静止的东西”的命令。

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

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

如果使用exception, -static-libgcc可能是个坏主意。 链接选项文档指出

有几种情况应用程序应该使用共享libgcc而不是静态版本。 其中最常见的是应用程序希望在不同的共享库中抛出和捕获exception。 在这种情况下,每个库以及应用程序本身都应该使用共享的libgcc。