Qt即使包含shell32.lib也无法打开

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

我有一个使用MSVC2013 64位编译的Qt5.4项目,它抛出链接器错误 LNK1104:无法打开文件“shell32.lib”。Windows上的每个Qt Widgets应用程序都需要此库

无论是否指定了该库的路径,都会引发此错误,并且 如果我包含其他库,那么该库不会出错,这使我相信Qt创建者会自动在.pro文件以外的指定位置查找shell32

.pro文件如下所示

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添加它),但至少有一个解决方案。

我找到了一个解决方案。打开左侧窗格上的“项目”选项卡,然后:

  • 将所有所需的库路径添加到LIB变量
  • 将sc.exe的路径(在Windows SDK/bin文件夹中)添加到路径
  • 重建
  • 显然,将LIBS+=放入.pro文件在我的Qt中不起作用,尽管INCLUDEPATH+=for headers起作用。哦,好吧。

    像这样使用它

    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)