我有一个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。
libgcc_s_dw2-1.dll
位于MinGW安装的bin
子目录中,其中包含二进制文件(gcc
,g++
, gdb
等。)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
变量,以便:
只是旁注:我已经在SO上检查了其他帖子,但无法找到解决方案(也许我已经错过了)。我也尝试了LIBS += -static
但结果是一样的。
答案 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,在这种情况下你可以使用其中一个或两个:
依赖步行者:from here
-static-libgcc
我的结果与windeployqt混合在一起,但是如果你有任何插件,那么它的安静就可以让你对这个部分进行排序。