2013-02-22 73 views
0

我是C++編程中的新手。我從Qt 5.0.1開始。我需要使用來自:https://code.google.com/p/tufao/的WebSockets,但我沒有安裝MinGW,所以我搜索了一下,我可以創建Qt庫項目,包括這些源文件並構建靜態庫。所以我做到了:無法在Qt中添加外部軟件包

QT  += network 
QT  -= gui 
TARGET = tufao 
TEMPLATE = lib 
CONFIG += staticlib 
INCLUDEPATH = src src/priv 
SOURCES += \ 
    src/websocket.cpp \ 
    src/url.cpp \ 
    src/simplesessionstore.cpp \ 
    src/sessionstore.cpp \ 
    src/querystring.cpp \ 
    src/httpserverresponse.cpp \ 
    src/httpserverrequestrouter.cpp \ 
    src/httpserverrequest.cpp \ 
    src/httpserver.cpp \ 
    src/httppluginserver.cpp \ 
    src/httpfileserver.cpp \ 
    src/headers.cpp \ 
    src/abstractmessagesocket.cpp \ 
    src/abstracthttpserverrequesthandler.cpp \ 
    src/priv/tcpserverwrapper.cpp \ 
    src/priv/rfc1123.cpp \ 
    src/priv/rfc1036.cpp \ 
    src/priv/reasonphrase.cpp \ 
    src/priv/http_parser.c \ 
    src/priv/asctime.cpp 

HEADERS += \ 
    src/websocket.h \ 
    src/url.h \ 
    src/tufao_global.h \ 
    src/simplesessionstore.h \ 
    src/sessionstore.h \ 
    src/sessionsettings.h \ 
    src/session.h \ 
    src/querystring.h \ 
    src/ibytearray.h \ 
    src/httpsserver.h \ 
    src/httpserverresponse.h \ 
    src/httpserverrequestrouter.h \ 
    src/httpserverrequest.h \ 
    src/httppluginserver.h \ 
    src/httpfileserver.h \ 
    src/headers.h \ 
    src/abstractmessagesocket.h \ 
    src/abstracthttpserverrequesthandlerfactory.h \ 
    src/abstracthttpserverrequesthandler.h \ 
    src/priv/websocket.h \ 
    src/priv/url.h \ 
    src/priv/tcpserverwrapper.h \ 
    src/priv/simplesessionstore.h \ 
    src/priv/sessionstore.h \ 
    src/priv/rfc1123.h \ 
    src/priv/rfc1036.h \ 
    src/priv/reasonphrase.h \ 
    src/priv/httpsserver.h \ 
    src/priv/httpserverresponse.h \ 
    src/priv/httpserverrequestrouter.h \ 
    src/priv/httpserverrequest.h \ 
    src/priv/httpserver.h \ 
    src/priv/httppluginserver.h \ 
    src/priv/httpfileserver.h \ 
    src/priv/http_parser.h \ 
    src/priv/cryptography.h \ 
    src/priv/asctime.h 
unix:!symbian { 
    maemo5 { 
     target.path = /opt/usr/lib 
    } else { 
     target.path = /usr/lib 
    } 
    INSTALLS += target 
} 

生成後,我得到libtufao.a。所以下一步就是測試它。我創建了簡單的測試項目,並通過單擊添加庫 - >外部 - >靜態來添加此庫。所以我改變libtufao.alibtufao.lib打開對話框只能打開.lib文件:

QT  += core gui network 
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 
TARGET = sockettest 
TEMPLATE = app 
SOURCES += main.cpp\ 
     mainwindow.cpp 
HEADERS += mainwindow.h \ 
FORMS += mainwindow.ui 
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../components/tufao-build-Desktop_Qt_5_0_1_MinGW_32bit-Release/release/ -llibtufao 
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../components/tufao-build-Desktop_Qt_5_0_1_MinGW_32bit-Release/debug/ -llibtufao 

INCLUDEPATH += $$PWD/../../components/tufao/src 
DEPENDPATH += $$PWD/../../components/tufao/src 

win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../components/tufao-build-Desktop_Qt_5_0_1_MinGW_32bit-Release/release/libtufao.lib 
else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../components/tufao-build-Desktop_Qt_5_0_1_MinGW_32bit-Release/debug/libtufao.lib 

但是當我嘗試建立這個測試項目中,我得到編譯器錯誤:

undefined reference to `imp__ZN5Tufao9WebSocket13connectToHostERK12QHostAddresstRK10QByteArrayRKNS_7HeadersE' collect2.exe:-1:

error: ld returned 1 exit status

誰能幫助我?

問候

編輯: 問題通過添加各種渠道進入我的DEST項目,並在.pro文件我加了DEFINES += TUFAO_LIBRARY解決。現在一切正在編譯好。

+0

請回答您的問題並將其標記爲正確答案。 – troyane 2013-03-06 10:16:05

回答

0

Adding external library into Qt Creator project

鏈接器找不到WebSocket::connectToHost實現,所以你需要一個其中有該功能的庫鏈接。

在你的.pro文件,添加

LIBS += "path/to/lib/libname" 

或者,如果它在你的庫路徑已經,您可以把

LIBS += -lmylibname 

所以我想對你來說,可能是

LIBS += -llibtufao 

希望有幫助。

+0

同樣的錯誤。也許問題是在我的庫項目中編譯這個lib(我的帖子中的第一個代碼)? – Dibo 2013-02-22 18:50:22

+0

...即使我將所有這些文件添加到我的測試項目中,我也會遇到類似的錯誤 – Dibo 2013-02-22 18:56:49

+0

.a文件是靜態庫的文件類型在unix上的樣子。您不能將其重命名爲.lib文件(Windows的靜態庫)。那可能是你遇到問題的地方。你在做什麼操作系統? – phyatt 2013-02-22 19:04:05