缺少libgcc_s_dw2-1.dll

时间:2016-07-05 09:29:41

标签: c windows qt mingw libgcc

我有一个Windows 7 64位系统,安装了最新的MinGW(32位)以及Qt 5.5 SDK(同样是32​​位),它还附带了自己的MinGW。由于我不是唯一一个使用该系统的人,我无法删除独立的MinGW。

我的项目正在使用qmake,并且是普通C项目(不是C ++)。一切都很好但是当我尝试在命令行中执行我的二进制文件时,由于系统上缺少libgcc_s_dw2-1.dll,我得到应用程序无法启动。

在查看问题后,我发现独立的MinGW和Qt SDK旁边的MinGW都有上面提到的DLL。

  • 独立MinGW - libgcc_s_dw2-1.dll位于MinGW安装的bin子目录中,其中包含二进制文件(gccg++gdb等。)
  • Qt MinGW - libgcc_s_dw2-1.dll位于C:\Qt\Tools\mingw492_32\i686-w64-mingw32\lib子目录内,而MinGW组件的二进制文件位于C:\Qt\Tools\mingw492_32\i686-w64-mingw32\bin内。

我想知道如何正确设置我的PATH变量,以便:

  • 应用程序正常启动
  • 与独立的MinGW安装没有冲突

只是旁注:我已经在SO上检查了其他帖子,但无法找到解决方案(也许我已经错过了)。我也尝试了LIBS += -static但结果是一样的。

1 个答案:

答案 0 :(得分:0)

您只需要将此dll与您的可执行文件一起复制,即:

// Find fields to populate in inflated template TextView productName = (TextView) view.findViewById(R.id.product_name); TextView productPrice = (TextView) view.findViewById(R.id.product_price); TextView productQuantity = (TextView) view.findViewById(R.id.product_quantity); // Extract properties from cursor String name = cursor.getString(cursor.getColumnIndexOrThrow(ProductDbContract.ProductEntry.COLUMN_NAME)); int price = cursor.getInt(cursor.getColumnIndexOrThrow(ProductDbContract.ProductEntry.COLUMN_PRICE)); int quantity = cursor.getInt(cursor.getColumnIndexOrThrow(ProductDbContract.ProductEntry.COLUMN_QUANTITY)); int id = cursor.getInt(cursor.getColumnIndexOrThrow(ProductDbContract.ProductEntry.ID)); // Set Tag productName.setTag(id);

您发现自己有其他依赖关系,看看您可以使用哪些其他deps: int id = (Integer)((TextView)findViewById(R.id.product_name)).getTag(); Log.d("LETSEE",String.valueOf(id)); 。您只需复制您可以通过以下方式查看的qt特定dll:

cp <path-to-qt-install-dir>\qt5.7.0\5.7\mingw53_32\bin\libgcc_s_dw2-1.dll <path-to-dest-dir>

注意

您可以将其静态链接到: 链接器命令如ldd <your-executable>ldd <executable> | grep -i qt,但我认为你开始遇到LGPL问题,而且你可能需要从源代码静态编译qt - 无法回想起这个特定的文件。

<强>注2

抱歉ldd适用于linux,只是意识到你有windows,在这种情况下你可以使用其中一个或两个:

我的结果与windeployqt混合在一起,但是如果你有任何插件,那么它的安静就可以让你对这个部分进行排序。