You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译C++程序时libgcc_s_dw2-1.dll与libstdc++-6.dll缺失问题求助

解决MinGW编译C程序依赖libgcc_s_dw2-1.dll和libstdc-6.dll的问题

问题核心

你加了-static、-static-libgcc、-static-libstdc++参数仍提示缺失DLL,确实是因为所用的SFML和jsonCpp是动态库版本——动态库本身会绑定MinGW的运行时DLL,哪怕自己的代码静态链接了标准库,第三方动态库的依赖还是会被带进来。另外你Makefile里编译.o文件时加的静态参数完全多余,这些参数只在链接阶段生效。

解决步骤

1. 换用静态版第三方库

  • 下载和你MinGW版本匹配的SFML静态包(注意32/64位、编译器版本对应),静态库文件名一般带-s后缀,比如libsfml-graphics-s.a、libsfml-window-s.a、libsfml-system-s.a。
  • jsonCpp要么找现成的静态库,要么自己用MinGW编译生成libjsoncpp.a,编译时记得加-static-libgcc -static-libstdc++,保证它本身不依赖动态运行时。

2. 修正Makefile

把链接参数改成静态库,同时SFML静态链接需要额外添加系统依赖库:

rtx.exe: base.o objects.o rtx.o
    g++ -O3 base.o objects.o rtx.o -o rtx -pthread -Lsrc\lib \
        -lsfml-graphics-s -lsfml-window-s -lsfml-system-s \
        -ljsoncpp -static-libgcc -static-libstdc++ -static \
        -lopengl32 -lfreetype -lwinmm -lgdi32 -lshell32

rtx.o: rtx.cpp
    g++ -Isrc\include -O3 -c rtx.cpp

objects.o: objects.cpp objects.hpp
    g++ -Isrc\include -O3 -c objects.cpp

base.o: base.cpp base.hpp
    g++ -Isrc\include -O3 -c base.cpp

clean:
    -rm *.o rtx.exe
  • 删掉了编译阶段多余的静态参数,只在链接阶段保留相关配置。
  • SFML静态链接必须添加opengl32、freetype等系统库,否则会出现链接错误。
  • -static放在参数最后,确保所有可静态链接的部分都被处理。

3. 验证结果

编译完成后,用objdump -x rtx.exe | grep DLL命令查看程序依赖的DLL,如果看不到libgcc_s_dw2-1.dll和libstdc++-6.dll,就说明静态链接成功了。

内容的提问来源于stack exchange,提问作者Leroy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:39:18