2013-05-22 133 views
2

我在QtCreator中添加外部库文件时遇到了一个简单但非常烦人的问题。我在.pro文件通过以下线路将它们添加:问题与Qt Creator LIBS路径?

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,其他rwise你会得到链接问题。

而且我还发现,通过这种link答案LIB问题在那里的报价:

“正常

debug:LIBS += ... 
else:LIBS += ... 

解决方案休息时,用户简单地使用CONFIG += debugCONFIG += release调试与释放之间切换建立(他们这样做;没有人记得在CONFIG += debug之前说CONFIG -= release release_and_debug :)。

这是规范的方式到范围上调试:

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

不管怎么说,非常感谢。

+0

也许尝试将LIBS行更改为LIBS + = $$ quote(D:/dcmtk-3.6.0/Lib\files/Release/)\ – Shf

+1

如果您实际上将引号字符放在他们周围,是否可以工作? – cmannett85

+0

我用我找到的解决方案更新了我的问题:)。 –

回答

1

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

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

以上您的问题几乎可以肯定是,因为缺少引号(空间被解释为一个参数打破,你需要它是一个参数)。

+0

谢谢,在我找到解决方案之前,我还没有见过你。但我更新了包含解决方案的问题。 :) –

+0

但是我想问你另一个问题,如果你知道。如果我想在'/ NODEFAULTLIB'中将几个文件放在一起忽略,有什么办法可以在一行中完成?或者我必须在几行内做到这一点? –