2014-12-04 66 views
1

我的問題可能看起來像是一個真正的副本,但是我檢查了許多相關問題,但問題仍然存在。在Qt中使用庫

我發現編譯一個項目叫做SMTPEmail,所以我有目錄Libraries/SMTPClient/debugLibraries/SMTPClient/release下我.dll.lib文件。

enter image description here

當我嘗試包括在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 

,我沒有做的就是複製或鏈接的頭文件它們是圖書館我的應用程序內的唯一的事情?

我有強烈的感覺,我錯過了一小步,你能幫我指出我做錯了什麼嗎?

回答

3

我覺得你的問題是(至少)這行:

INCLUDEPATH += ./Libraries/SMTPClient/debug 

我幾乎可以肯定,這是不包含路徑,其中頭可以包括emailadress.h找到了正確的道路。

您已經解釋了您嘗試的LIBS值以及長度很大的lib路徑,但是您從編譯器中獲得包含錯誤,而不是鏈接器中庫的鏈接問題。我建議要弄清楚其中的頭文件位於並將其添加到include路徑如下:

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

回答您的問題:

,我並沒有被複制的唯一的事頭文件應該在庫裏面,是嗎?

這取決於你的意思。如果你的意思是圖書館應該是自包含的,那麼答案是否定的,除非你正在使用手動符號解析和類似的動態庫加載,我不推薦用於簡單情況。

如果您的意思是,它隨您嘗試重複使用的項目一起提供,那麼確定,這就是爲什麼您需要將項目中的includepath指定爲該路徑。

+0

感謝您的回答。這正是我期待的。我認爲這個庫默認是自包含的,因爲我有一個.lib和.dll文件(錯誤的推理我猜,我應該在windows下閱讀更多的.lib和.dll)。 – flatronka 2014-12-04 12:24:33

+0

是的,問題肯定是這樣的。非常感謝! – flatronka 2014-12-04 13:57:22