我有一个用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添加它),但至少有一个解决方案
答案 0 :(得分:2)
我找到了解决方案。打开左窗格中的“项目”选项卡,然后:
所以显然在.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
这可以通过右键单击左侧面板中的项目自动生成 然后选择菜单项"添加库"
然后选择Static Library for windows并浏览您的路径以选择shell32.lib和include文件夹的路径
再次确保在编译此项目之前运行qmake
这可以在项目菜单中找到。您找到了相同的菜单"添加图书馆"选项
答案 2 :(得分:1)