即使包含在内,Qt 也无法打开 shell32.lib
Qt fails to open shell32.lib even when included
我有一个使用 MSVC2013 64 位编译的 QT 5.4 项目抛出链接器错误
LNK1104: 无法打开文件 'shell32.lib'。 Windows 上的每个 Qt Widgets 应用程序都需要这个库。
无论是否指定了该库的路径,都会抛出此错误,并且
如果我包含其他一些库,我不会收到该库的错误消息,这让我相信 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: can't execute rc.exe."
显然我的 .pro 中的 LIBS += 语句不起作用,尽管 INCLUDEPATH += 起作用(删除后我得到 "can't find windows.h")。
我不知道为什么 LIBS+= 不起作用或者为什么我还需要 RC.exe 的路径(我从来不需要使用 Visual Studio 添加它),但至少在那里是一个解决方案。
我找到了解决办法。打开左窗格中的“项目”选项卡,然后:
- 将所有需要的库路径添加到 LIB 变量
- 将 sc.exe 的路径(在 Windows SDK/bin 文件夹中)添加到 PATH
- 重建。
所以显然将 LIBS += 放在 .pro 文件中在我的 Qt 中不起作用,尽管 headers 的 INCLUDEPATH+= 可以。好吧。
像这样使用它
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)
确保 运行 qmake 在对 .pro 文件进行更改后
这可以通过右键单击左侧面板中的项目自动生成
然后 select 菜单项 "Add Library"
然后select"External Library"
然后 select windows 的静态库并浏览到 select shell32.lib 的路径并包含文件夹
再次确保在编译这个项目之前运行 qmake
这可以在项目菜单中找到。与您找到 "Add Library" 选项的菜单相同
Visual Studio 默认安装不包括桌面应用程序:
我有一个使用 MSVC2013 64 位编译的 QT 5.4 项目抛出链接器错误 LNK1104: 无法打开文件 'shell32.lib'。 Windows 上的每个 Qt Widgets 应用程序都需要这个库。
无论是否指定了该库的路径,都会抛出此错误,并且 如果我包含其他一些库,我不会收到该库的错误消息,这让我相信 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: can't execute rc.exe." 显然我的 .pro 中的 LIBS += 语句不起作用,尽管 INCLUDEPATH += 起作用(删除后我得到 "can't find windows.h")。
我不知道为什么 LIBS+= 不起作用或者为什么我还需要 RC.exe 的路径(我从来不需要使用 Visual Studio 添加它),但至少在那里是一个解决方案。
我找到了解决办法。打开左窗格中的“项目”选项卡,然后:
- 将所有需要的库路径添加到 LIB 变量
- 将 sc.exe 的路径(在 Windows SDK/bin 文件夹中)添加到 PATH
- 重建。
所以显然将 LIBS += 放在 .pro 文件中在我的 Qt 中不起作用,尽管 headers 的 INCLUDEPATH+= 可以。好吧。
像这样使用它
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)
确保 运行 qmake 在对 .pro 文件进行更改后
这可以通过右键单击左侧面板中的项目自动生成 然后 select 菜单项 "Add Library"
然后select"External Library"
然后 select windows 的静态库并浏览到 select shell32.lib 的路径并包含文件夹
再次确保在编译这个项目之前运行 qmake
这可以在项目菜单中找到。与您找到 "Add Library" 选项的菜单相同
Visual Studio 默认安装不包括桌面应用程序: