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

时间:2015-01-23 08:31:33

标签: qt

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

无论是否指定了该lib的路径,都会抛出此错误 如果我包含一些其他库,我没有得到该库的错误,这使我相信Qt Creator会自动在.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_CORE变量下列出的库之一。

在左窗格的“项目”选项卡中,将所需的库路径添加到LIB变量,并将SC.exe的路径(也在Windows SDK中)添加到PATH变量。后者是必要的,否则你会得到" LNK 1158:无法执行rc.exe。" 显然我的.pro中的LIBS + =语句不起作用,虽然INCLUDEPATH + =(我得到"无法找到windows.h"当它被删除时)。

我不知道为什么LIBS + =不起作用或为什么我还需要RC.exe的路径(我从来没有使用Visual Studio添加它),但至少有一个解决方案

3 个答案:

答案 0 :(得分:2)

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

  1. 将所有需要的库路径添加到LIB变量
  2. 将sc.exe的路径(在Windows SDK / bin文件夹中)添加到PATH
  3. 重建。
  4. 所以显然在.pro文件中放置LIBS + =只是在我的Qt中没有工作,尽管INCLUDEPATH + = for headers。哦,好吧。

答案 1 :(得分:2)

像这样使用

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

这可以通过右键单击左侧面板中的项目自动生成 然后选择菜单项"添加库"

enter image description here

然后选择"外部图书馆" enter image description here

然后选择Static Library for windows并浏览您的路径以选择shell32.lib和include文件夹的路径

enter image description here

再次确保在编译此项目之前运行qmake

这可以在项目菜单中找到。您找到了相同的菜单"添加图书馆"选项

答案 2 :(得分:1)

Visual Studio默认安装不包括桌面应用程序:

Click for Visual Studio installer option