首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MinGW .exe需要一些gcc dll的代码吗?

MinGW .exe需要一些gcc dll的代码吗?
EN

Stack Overflow用户
提问于 2013-08-09 00:58:13
回答 3查看 72.4K关注 0票数 74

在用MinGW编译时,我必须在MinGW bin目录下复制特定的dll文件,然后才能运行MinGW(即使使用"-static“和/或”-static++“)。我该怎么改变呢?是否有我必须使用的MinGW的特殊版本?最终,我希望能够只使用目录中的exe (并且没有设置windows环境变量)来运行程序。这些档案是:

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

以下是step's I休整的完整列表:

  1. 打开代码::块
  2. 选择"File->New->Project->Console“
  3. 填写"Hello“项目的项目设置
  4. 右键单击Project->.>Hello(根目标)->Other选项
  5. 在已经设置为"-static“的"-fexceptions”下输入“-fexceptions”(或“静态-libstdc++”)。
  6. CTRL-F9 :构建项目(不执行)
  7. 导航到Windows中,并运行构建的"Hello World.exe“文件。
  8. 当消息弹出时单击"OK“,上面写着”错误:libstdc++-6.pop从您的计算机中丢失“。
  9. 将/MinGW/bin/目录中的"libstdc++-6.dll“复制到"Hello World.exe”目录中。
  10. 运行"Hello World.exe“
  11. 单击"OK“以显示”错误: libgcc_s_seh-1.dll从您的计算机中丢失“。
  12. 将"libgcc_s_seh-1.dll“复制到"Hello World.exe”目录中。
  13. 重复并最终复制“libwinplin-1.dll”。
  14. 查看消息 你好,世界!

编辑:我的命令行是:

代码语言:javascript
复制
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文件一起使用。为了安全起见,代码是:

代码语言:javascript
复制
// main.cpp
#include <iostream>

using namespace std;

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

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-09 01:39:05

你的命令错了!

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

代码语言:javascript
复制
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

然后,您将不再需要复制‘ll(为您的Hello程序)。

其他注释:

MinGW安装说明建议设置

代码语言:javascript
复制
c:\minGW;c:\MinGW\bin;

到PATH环境变量。

正常情况下

代码语言:javascript
复制
-static -static-libgcc -static-libstdc++

链接器选项应该可以工作(同时尝试所有三个选项)。但对libwinpthread-1.dll来说却不是。

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

没有“-静态-什么”命令。

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

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

Cmake用户应该尝试添加:

代码语言:javascript
复制
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")
票数 65
EN

Stack Overflow用户

发布于 2016-05-22 05:51:52

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

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

票数 11
EN

Stack Overflow用户

发布于 2021-01-09 17:22:28

上面对答案的注释包含完整的解决方案,因此我只想添加CodeBlocks透视图。我用Windows7 x64和MinGW-W648.1.0‘’i 686-posix-侏儒‘验证了它。

这解决了行动部的问题

  • 创建新项目并将其命名为"Hello“
  • 接受向导中的所有默认值
  • 选择Project/BuildOptions/并选择"Hello“。Out编辑对调试和发布都是有效的
  • 在“链接器”选项卡中的“其他链接器选项”添加以下内容 -static -静态-libgcc-静态-strc++ -lwinpthread
  • 在工具栏上选择"Debug“并按Build (黄色齿轮图标)
  • 按绿色运行图标,确认构建是否正常。

测试

  • 打开终端窗口,转到HelloWorld\bin\debug文件夹
  • 在那里开始你的世界。
  • 确认它有效,而不要求任何DLL。

还可以从资源管理器窗口启动它,并确认它也不请求DLL。

注意:在我的Win7x64系统上,当从浏览器启动HelloWorld.exe时,添加"-lwinpthread“行会导致CodeBlocks忽略”Projects/Properties/Tab_BuildTarget/“执行结束时暂停”HelloWorld.exe“中的设置。

请注意,如果您使用而不是,则可能不会使用带有“posix”线程模型的MinGW-W64编译器。这两个代码块MinGW-W64捆绑安装包都使用这样的版本。对于CB20.03,从MinGW-W64下载页面下载的相关内容如下

  • 32位: 8.1.0‘’i 686-posix-侏儒‘’
  • 64位: 8.1.0‘x86_64-posix-seh’‘

例如,如果我直接使用Codeblock设置安装编译器,并选择了32位编译器包‘i 686-Win32-侏儒’,那么只有前两个DLL会丢失。在这种情况下,修补程序只能将链接器选项设置为

代码语言:javascript
复制
  -static-libgcc
  -static-strc++
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18138635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档