2013-02-22 68 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