在QtCreator中添加外部库文件时,我遇到了一个简单但非常烦人的问题。我通过.pro
文件中的以下行添加它们:
INCLUDEPATH += $$quote(D:/dcmtk-3.6.0/Prefix Files/include)
LIBS += $$quote(-LD:/dcmtk-3.6.0/Lib files/Release/) \
-ladvapi32 \
-ldcmdata\
-loflog\
-lofstd\
-lws2_32\
-lnetapi32\
-lwsock32\
LIBS += $$quote(-LD:/dcmtk-3.6.0/Lib files/Debug/) \
-ladvapi32 \
-ldcmdata\
-loflog\
-lofstd\
-lws2_32\
-lnetapi32\
-lwsock32\
但每次发出错误:-1: error: LNK1181: cannot open input file 'files/Release).obj'
。
我知道问题正在发生,因为那里的空间,尽管尝试遵循文档它似乎不起作用。我也认为可能是QtCreator不会更新我想要做的更改。有什么建议吗?感谢。
使用已解决的答案进行编辑:
我将.pro文件中的代码更改为:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TEMPLATE = app
TARGET = NewApp
##QMAKE_CXXFLAGS_DEBUG += /MTd
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
DEFINES += _REENTRANT
QMAKE_CFLAGS_RELEASE -= -MD
QMAKE_CFLAGS_RELEASE = -MT
QMAKE_CFLAGS_DEBUG -= -MDd
QMAKE_CFLAGS_DEBUG = -MTd
QMAKE_CXXFLAGS_RELEASE -= -MD
QMAKE_CXXFLAGS_RELEASE += -MT
QMAKE_CXXFLAGS_DEBUG -= -MDd
QMAKE_CXXFLAGS_DEBUG += -MTd
QMAKE_LFLAGS_DEBUG += /NODEFAULTLIB:msvcrtd.lib
QMAKE_LFLAGS_RELEASE += /NODEFAULTLIB:msvcrt.lib
INCLUDEPATH += $$quote(D:/dcmtk-3.6.0/Prefix Files/include/)
CONFIG( debug, debug|release ) {
LIBS += $$quote(-LD:/dcmtk-3.6.0/LibFiles/Debug/) \
-ladvapi32\
-ldcmdata\
-loflog\
-lofstd\
-lws2_32\
-lnetapi32\
-lwsock32\
}
else {
LIBS += $$quote(-LD:/dcmtk-3.6.0/LibFiles/Release/) \
-ladvapi32\
-ldcmdata\
-loflog\
-lofstd\
-lws2_32\
-lnetapi32\
-lwsock32\
}
这里我必须添加以下行:
QMAKE_LFLAGS_DEBUG += /NODEFAULTLIB:msvcrtd.lib
QMAKE_LFLAGS_RELEASE += /NODEFAULTLIB:msvcrt.lib
因为,如果您打开MT
,则必须使用/NODEFAULTLIB
开关忽略这些库:libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
,否则会出现链接问题。
我还通过link找到了LIB
问题的答案:
“正常
debug:LIBS += ...
else:LIBS += ...
当用户天真地使用CONFIG += debug
或CONFIG += release
在调试和发布版本之间切换时,解决方案会中断(他们会这样做;没有人记得在CONFIG -= release
之前说CONFIG += debug
release_and_debug :)
这是调试范围的规范方法:
CONFIG( debug, debug|release ) {
# debug
} else {
# release
}
“
无论如何,非常感谢。
答案 0 :(得分:1)
在.pro文件中指定库链接位置的正确方法实际上是通过QMAKE_LIBDIR
变量:
QMAKE_LIBDIR += "D:/dcmtk-3.6.0/Lib files/Release/"
上面的问题几乎可以肯定是因为缺少引号(空格被解释为参数中断,你需要它作为一个参数)。