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
这里是步骤的完整列表我休耕:
- 打开Code :: Blocks
- select“文件 – >新build – >项目 – >控制台”
- 填写项目“Hello World”的项目设置
- 右键点击Project-> Build Options …-> Hello World(Root target) – > Other Options
- 在已经设置的“-fexceptions”下input“-static”(或“-static-libstdc ++”
- CTRL-F9:生成项目(不执行)
- 在Windows资源pipe理器中导航到并运行内置的“Hello World.exe”文件。
- 点击“确定”时,popup一个消息说:“错误:libstdc ++ – 6.dll从您的计算机丢失。
- 从/ MinGW / bin /目录复制“libstdc ++ – 6.dll”到“Hello World.exe”目录。
- 运行“Hello World.exe”
- 点击“确定”,提示“错误:libgcc_s_seh-1.dll从您的计算机中丢失”。
- 将“libgcc_s_seh-1.dll”复制到“Hello World.exe”目录中。
- 重复并最终复制“libwinpthread-1.dll”。
-
查看消息
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
。
没有“静止的东西”的命令。
只有标准库libgcc和libstdc ++可以设置为静态链接。
对于其他库,您首先切换到静态链接与“静态”,然后列出库包含单独的命令,即“-lpthread”。
如果使用exception, -static-libgcc
可能是个坏主意。 链接选项文档指出
有几种情况应用程序应该使用共享libgcc而不是静态版本。 其中最常见的是应用程序希望在不同的共享库中抛出和捕获exception。 在这种情况下,每个库以及应用程序本身都应该使用共享的libgcc。