C++ Qt5.1中缺少libgcc_s_sjlj-1.dll

C++ Qt5.1中缺少libgcc_s_sjlj-1.dll,c++,dll,qt5,C++,Dll,Qt5,我的程序无法启动,抱怨需要libgcc_s_sjlj-1.dll。但是,此文件不存在于Qt目录中。我做了一些搜索,发现应该添加-static libgcc和-static libstdc++。这是我的.pro文件: QT += core gui xml greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = mouseEventProcess TEMPLATE = app SOURCES += main.cpp\

我的程序无法启动,抱怨需要libgcc_s_sjlj-1.dll。但是,此文件不存在于Qt目录中。我做了一些搜索,发现应该添加-static libgcc和-static libstdc++。这是我的.pro文件:

QT       += core gui xml

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = mouseEventProcess
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
    fileOp.cpp \
    xmlpraser.cpp \
    pixmapOp.cpp \
    mathOp.cpp

HEADERS  += mainwindow.h \
    fileOp.h \
    xmlpraser.h \
    pixmapOp.h \
    mathOp.h

FORMS    += mainwindow.ui
#COMPILE LIBGCC_S_SJLJ-1.DLL AND LIBSTDC++-6.DLL INTO THE EXE FILE
win32{
QMAKE_LFLAGS += -static-libgcc
QMAKE_LFLAGS += -static-libstdc++
#BOOST LIBRARIES. CHANGE TO YOUR OWN.
INCLUDEPATH += D:/boost_1_51_0
#OPENCV LIBRARIES. CHANGE TO YOUR OWN.
INCLUDEPATH += D:/opencv2.4.4/include
INCLUDEPATH += D:/opencv2.4.4/release/install/include
LIBS += -LD:/opencv2.4.4/release/install/lib \
    -lopencv_core244 \
    -lopencv_highgui244 \
    -lopencv_imgproc244
    #-lopencv_features2d244 \
    #-lopencv_calib3d244
}
unix{
#BOOST LIBRARIES. CHANGE TO YOUR OWN.
INCLUDEPATH += /home/panda/boost_1_51_0
#OPENCV LIBRARIES.IF YOU COMPILED AND INSALLED
#OPENCV FROM CMAKE & MINGW, JUST LEAVE IT BE,
#UNLESS YOU KNOW EXACTLY WHAT YOU ARE DOING.
INCLUDEPATH += /usr/local/include/opencv
INCLUDEPATH += /usr/local/include/opencv2
LIBS += -lopencv_core -lopencv_imgproc -lopencv_highgui
LIBS += -lopencv_ml -lopencv_video -lopencv_features2d
LIBS += -lopencv_calib3d -lopencv_objdetect -lopencv_contrib
LIBS += -lopencv_legacy -lopencv_flann
}
如果这样做有效,则不需要libgcc_s_sjlj-1.dll和libstdc++-6.dll。但是,在我将程序放入.exe文件夹之前,它仍然需要libstdc++-6.dll


所以我的问题是:我在哪里可以获得libgcc_s_sjlj-1.dll,或者我的.pro文件中是否有任何问题?

呸,我很愚蠢。您的“我的程序缺少libgcc_s_sjlj-1.dll,而不是libgcc_s_dw2-1.dll”应该已经敲响了警钟

你用错误的MinGW编译。MinGW有几种不同的异常处理程序:sjlj、dwarf、seh。矮人只是32箱而已。当您有libgcc_s_dw2-1.dll时,这意味着您安装了一个32位的MinGW

您必须使用用于编译Qt的相同MinGW编译程序。sjljmingw适用于32位64位,因此我认为qt项目提供使用sjljmingw编译的二进制软件包是有意义的


有一些MinGW包可用,允许您选择将使用哪种异常处理机制。最好的选择可能是使用MinGW,它捆绑在Qt 5.1.1安装程序包中。

在so搜索栏中输入'libgcc_s_dw2-1.dll'来查找十几篇文章中的一篇,这会告诉您这是MinGW的一部分,这真的很难吗?这里有54张赞成票:@Greenflow我已经试过了,但是没有用。PS:我的程序缺少libgcc_s_sjlj-1.dll,而不是libgcc_s_dw2-1.dll。似乎是OpenCV库导致了这个问题。当我删除LIBS+=-lopencv_xxx244语句和所有OpenCV代码时,程序可以在Windows中正常运行。同样的问题,同样的解决方案:libgcc__sjlj-1.dll是MinGW的一部分,应该在MinGW安装的bin文件夹中找到。@Greenflow Oops,libgcc_sjlj-1.dll在MinGW的bin文件夹中不存在。这是因为我使用的是Qt版本的5.1吗?谢谢你提供的信息。我今天降级到Qt5.0.2。在MingW的bin(mingw47_32)文件夹下有一个libgcc_s_sjlj-1.dll文件,问题就解决了。我将针对5.1.0(mingw48_32)重新安装Qt5.1.1,我现在正在使用它来查看它是否可以解决问题。我今天安装了Qt5.1.1,但是仍然遇到同样的问题。在下载页面上,只有一个链接可用于MinGW 32位windows。我安装了所有的软件包,但在C:\Qt\Qt5.1.1\5.1.1\mingw48\u 32\bin文件夹下仍然找不到libgcc_s_sjlj-1.dll。那么,MinGW是否可能已删除此dll文件?不,不可能。它根本就不在那里。我认为,下载的mingw48_32使用了dwarf异常处理。你的Qt也下载了。我想您的ovencv库是用sjlj编译器编译的,需要这种依赖关系。您可以尝试在web上查找libgcc_s_sjlj-1.dll。危险的里面可能有恶意软件。或者,您可以使用qt mingw重新编译opencv库。或者你给自己买了一个sjlj MinGW,但是你必须用它来编译你的Qt源代码。“我想你的ovencv库是用sjlj编译器编译的,需要这个依赖关系。”天哪,就是这样!opencv库是用Qt5.0.2的MinGW编译的,它提供了我前面提到的libgcc__sjlj-1.dll。现在我知道该怎么办了。再次感谢!