使用 MinGW 编译时,我必须在运行 exe 之前从 MinGW bin 目录中复制某些 dll 文件(即使使用“-static”和/或“-static-libstdc++”。) 我该如何改变呢?是否有我必须使用的特殊版本的 MinGW?最终,我希望能够在目录中除了 exe 之外什么都没有运行程序(并且没有设置 windows 环境变量。)这些文件是:
- libstdc++-6.dll
- libgcc_s_seh-1.dll
- libwinpthread-1.dll
这是我休闲的步骤的完整列表:
- 打开代码:: block
- 选择“文件->新建->项目->控制台”
- 填写项目“Hello World”的项目设置
- 右键Project->Build Options...->Hello World (Root target)->Other Options
- 在已设置的“-fexceptions”下输入“-static”(或“-static-libstdc++”)
- CTRL-F9 : 构建项目(不执行)
- 在 Windows 资源管理器中导航到并运行构建的“Hello World.exe”文件。
- 当弹出消息“错误:您的计算机中缺少 libstdc++-6.dll”时,单击“确定”。
- 将“libstdc++-6.dll”从/MinGW/bin/目录复制到“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安装说明推荐设置
c:\minGW;c:\MinGW\bin;
到 PATH 环境变量。
通常情况下
-static -static-libgcc -static-libstdc++
链接器选项应该可以工作(一次尝试所有 3 个)。但不适用于 libwinpthread-1.dll
。
另外,在重新编译之前尝试clean
。
没有“-static-something”命令。
只有标准库libgcc和libstdc++可以设置为静态链接。
对于其他库,您首先使用“-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/