【问题标题】:Issue with Qt Creator LIBS path?Qt Creator LIBS 路径有问题吗?
【发布时间】:2013-05-22 11:02:38
【问题描述】:

在 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 += debugCONFIG += release 在调试和发布版本之间切换时,解决方案会中断(他们确实这样做了;没有人记得在CONFIG += debug 之前说CONFIG -= releaserelease_and_debug :)。

这是调试范围的规范方法:

CONFIG( debug, debug|release ) {
    # debug
} else {
    # release
}

"

无论如何,非常感谢。

【问题讨论】:

  • 也许尝试将 LIBS 行更改为 LIBS += $$quote(D:/dcmtk-3.6.0/Lib\ files/Release/) \
  • 如果你真的在它们周围加上引号字符会起作用吗?
  • 我已经用我找到的解决方案更新了我的问题:)。

标签: c++ qt


【解决方案1】:

在 .pro 文件中指定库链接位置的正确方法实际上是通过 QMAKE_LIBDIR 变量:

QMAKE_LIBDIR += "D:/dcmtk-3.6.0/Lib files/Release/"

您上面的问题几乎可以肯定是因为缺少引号(空格被解释为参数中断,您需要它作为一个参数)。

【讨论】:

  • 谢谢,在我找到解决方案之前我还没有看到你的。但我已经更新了一个解决方案包括的问题。 :)
  • 但是如果你知道的话,我想问你另一个问题。如果我想在/NODEFAULTLIB 中设置几个文件一起忽略,有什么办法可以在一行中完成吗?还是我必须分几行?
猜你喜欢
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
相关资源
最近更新 更多