当使用MinGW编译时,我必须在exe运行之前从MinGW bin目录中复制某些dll文件(即使使用“-静态”和/或“-静态-libstdc”。)我该如何更改它?我必须使用MinGW的特殊版本吗?最终,我希望能够在目录中只使用exe运行程序(并且没有设置Windows环境变量。)这些文件是:
这是步骤我休耕的完整列表:
>
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
。
另外,在重新编译之前尝试清理
。
没有“静态”命令。
只有标准库libgcc和libstdc可以设置为静态链接。
对于其他库,您首先切换到使用“-sten”的静态链接,然后使用单独的命令列出要包含的库,即“-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")
-strist-libgcc
如果使用异常可能是个坏主意
有几种情况下,应用程序应该使用共享的libgcc而不是静态版本。其中最常见的是当应用程序希望跨不同的共享库抛出和捕获异常时。在这种情况下,每个库以及应用程序本身都应该使用共享的libgcc。
上面答案的注释包含完整的解决方案,因此我只想添加CodeBlock透视图。我在Windows7 x64上使用CodeBlocks16和MinGW-W64 8.1.0“i686-posx-dwarf”对其进行了验证。
这解决了OPs的问题
>
创建新项目并将其命名为“Hello World”
接受向导中的所有默认值
选择Project/BuildOptions/并选择“Hello World”。输出编辑对Debug和Release都有效
在“链接器”选项卡的“其他链接器选项”处添加以下内容
-static
-static-libgcc
-static-strc++
-lwinpthread
在工具栏上选择“调试”并按构建(黄色齿轮图标)
按绿色运行图标并确认构建正常
测试
您也可以从资源管理器窗口启动它,并确认它也不要求DLL。
注意:在我的Win7x64系统上,当从资源管理器启动HelloWorld. exe时,添加“-lwinpthon”行会导致代码块忽略“Projects/Properties/Tab_BuildTargets/”执行结束时暂停“中的设置。所以“Hello World”输出几乎不可见,因为窗口在执行后立即关闭(也许有人知道为什么)
请注意,如果您没有找到OP的winpthon. dll问题,那么您可能不会使用具有“posx”线程模型的MinGW-W64编译器。两个代码块MinGW-W64-bundled安装包都使用此类版本。对于CB20.03,从MinGW-W64下载页面的相关下载将是
例如,如果我直接使用Codeblock设置安装编译器并选择32位编译器包“i686-win32-dwarf”,则只有前2个DLL会丢失。在这种情况下,修复方法是将链接器选项仅设置为
-static-libgcc
-static-strc++