【问题标题】:Using libraries in Qt在 Qt 中使用库
【发布时间】:2014-12-04 11:49:28
【问题描述】:

我的问题可能看起来确实是重复的,但是尽管我检查了许多相关问题,但我的问题仍然存在。

我找到并编译了一个名为 SMTPEmail 的项目,所以我的 .dll.lib 文件位于 Libraries/SMTPClient/debugLibraries/SMTPClient/release 目录下。

当我尝试在 emailadress.h:#include <emailaddress.h>#include <SMTPEmail/emailaddress.h> 的情况下包含头文件时,我收到错误无法打开包含文件“emailaddress.h”。 Q_DECL_EXPORT 修饰符用于头文件中。

SMTPEmail.pro

...
QT       += core network

TARGET = SMTPEmail

TEMPLATE = lib

DEFINES += SMTP_BUILD

win32:CONFIG += dll

QMAKE_CXXFLAGS += -fPIC
...

MyProject.pro

...

INCLUDEPATH += ./Libraries/SMTPClient/debug

DEPENDPATH += ./Libraries/SMTPClient/debug

win32:LIBS += ./Libraries/SMTPClient/debug/SMTPEmail.lib
...

我也试过了:

LIBS += -L./Libraries/SMTPClient/debug/ -lSMTPEmail

LIBS += -L$$_PRO_FILE_PWD_/Libraries/SMTPClient/debug/ -lSMTPEmail

LIBS += -L$$PWD_/Libraries/SMTPClient/debug/ -lSMTPEmail

LIBS += -L./MyProject/Libraries/SMTPClient/release/ -lSMTPEmail

我唯一没有做的是将库中的头文件复制或链接到我的应用程序?

我有一种强烈的感觉,我在某个地方错过了一小步,你能帮我指出我做错了什么吗?

【问题讨论】:

    标签: c++ qt qt4 qmake qtcore


    【解决方案1】:

    我认为你的问题是(至少)这一行:

    INCLUDEPATH += ./Libraries/SMTPClient/debug
    

    我几乎可以肯定,这不是指向包含 emailadress.h 在内的标头的包含路径的正确路径。

    您已经详细解释了您尝试过的 LIBS 值以及 lib 路径,但是您从编译器中得到了一个包含错误,而不是来自链接器的库的链接问题。我建议找出标头的位置并将其添加到包含路径中,如下所示:

    # This is just pseudo code, but you need something like this
    INCLUDEPATH += $$PWD/Includes/SMTPClient
    

    回答您的问题:

    我唯一没有做的是复制应该在库中的头文件,对吗?

    这取决于你的意思。如果您的意思是库是否应该是自包含的,那么答案是否定的,除非您使用动态库加载和手动符号解析等,对于简单的情况我不建议这样做。

    如果您的意思是,它与您尝试重用的项目一起提供,那么可以肯定,这就是为什么您需要在项目中将包含路径指定到该路径的原因。

    【讨论】:

    • 感谢您的回答。这正是我正在寻找的。我认为该库默认情况下是自包含的,因为我有一个 .lib 和 .dll 文件(我猜是错误的推理,我应该在 windows 下阅读更多的 .lib 和 .dll)。
    • 是的,问题肯定是这样的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    相关资源
    最近更新 更多