Qt即使包含shell32.lib也无法打开
我有一个使用MSVC2013 64位编译的Qt5.4项目,它抛出链接器错误 LNK1104:无法打开文件“shell32.lib”。Windows上的每个Qt Widgets应用程序都需要此库 无论是否指定了该库的路径,都会引发此错误,并且 如果我包含其他库,那么该库不会出错,这使我相信Qt创建者会自动在.pro文件以外的指定位置查找shell32 .pro文件如下所示Qt即使包含shell32.lib也无法打开,qt,Qt,我有一个使用MSVC2013 64位编译的Qt5.4项目,它抛出链接器错误 LNK1104:无法打开文件“shell32.lib”。Windows上的每个Qt Widgets应用程序都需要此库 无论是否指定了该库的路径,都会引发此错误,并且 如果我包含其他库,那么该库不会出错,这使我相信Qt创建者会自动在.pro文件以外的指定位置查找shell32 .pro文件如下所示 QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += w
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = test
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
win32:CONFIG(release, debug|release): LIBS += $$quote(C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib/shell32.lib)
else:win32:CONFIG(debug, debug|release): LIBS += $$quote(C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib/shell32.lib)
INCLUDEPATH += $$quote(C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Include)
DEPENDPATH += $$quote(C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Include)
不确定这是否相关,但shell32.lib是QMAKE.conf中QMAKE_LIBS_核心变量下列出的库之一
解决方案
在左窗格的“项目”选项卡中,将所需的库路径添加到LIB变量,并将SC.exe(也在Windows SDK中)的路径添加到path变量。后者是必需的,否则您将得到“LNK 1158:无法执行rc.exe”
显然,my.pro中的LIBS+=语句不起作用,尽管INCLUDEPATH+=起作用(当它被删除时,我会得到“找不到windows.h”)
我不知道为什么LIBS+=不起作用,或者为什么我还需要RC.exe的路径(我从来没有使用Visual Studio添加它),但至少有一个解决方案。我找到了一个解决方案。打开左侧窗格上的“项目”选项卡,然后:
win32:CONFIG(release, debug|release): LIBS += -L$$quote(C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib/) -lshell32
else:win32:CONFIG(debug, debug|release): LIBS += -L$$quote(C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Lib/) -lshell32
INCLUDEPATH += $$quote(C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Include)
DEPENDPATH += $$quote(C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/Include)
确保在更改.pro文件后运行qmake
这可以通过右键单击左侧面板中的项目自动生成
然后选择菜单项“添加库”
然后选择“外部库”
然后选择Static Library for windows并浏览路径以选择shell32.lib和include文件夹的路径
再次确保编译此项目之前运行qmake
这可以在“项目”菜单中找到。与“添加库”选项相同的菜单不包括桌面应用程序:
我认为第一步是让您向我们展示您的.pro文件的外观,您还应该能够在编译输出中找到链接行,并将其发布。唯一的编译器输出是经过的时间,唯一的链接器输出是“:-错误:LNK1104:无法打开文件'shell32.lib'”还有以下警告:“C:\Program Files(x86)\Microsoft SDK\Windows\v7.1A\Include\sal\u supp.h:57:警告:C4005:'\uuu useHeader:宏重新定义”C:\Program Files(x86)\Microsoft SDK\Windows\v7.1A\Include\specstrings\u supp.h:77:警告:C4005:“\u on\u failure”:宏重新定义目录名中是否真的有这些额外的空格?没有,只是在我复制/粘贴到此处时出现了这种情况找到了解决方案,我的印象是LIBS+=使设置环境变量变得不必要。显然不是。Qt没有错误。另外,在qmake中使用VC++编译器时,请确保在进行更改后始终运行qmake(如下Midhun所述)。这似乎对我不起作用(Win7 x64,Visual Studio 2013.5,Qt 5.7)