Can';t在Qt中添加外部包 我是C++编程新手。我从Qt5.0.1开始。我需要使用WebSockets from:但我没有安装MinGW,所以我在谷歌上搜索可以创建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 }

Can';t在Qt中添加外部包 我是C++编程新手。我从Qt5.0.1开始。我需要使用WebSockets from:但我没有安装MinGW,所以我在谷歌上搜索可以创建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 },qt,network-programming,websocket,Qt,Network Programming,Websocket,构建之后,我得到libtufao.a。所以下一步是测试它。我创建了简单的测试项目,并通过单击AddLibrary->external->static添加了这个库。“打开”对话框只能打开.lib文件,因此我将libtufao.a更改为libtufao.lib: QT += core gui network greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = sockettest TEMPLATE = app SOURC

构建之后,我得到
libtufao.a
。所以下一步是测试它。我创建了简单的测试项目,并通过单击AddLibrary->external->static添加了这个库。“打开”对话框只能打开
.lib
文件,因此我将
libtufao.a
更改为
libtufao.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
但当我尝试构建此测试项目时,我得到了编译器错误:

未定义的引用 `导入ZN5TUFAO9WebSocket 13连接到主机12QHOSTAddressTRK10QBYTEARRAYRKNS' collect2.exe:-1:

错误:ld返回了1个退出状态

有人能帮我吗

问候

编辑: 通过将所有源添加到我的dest项目和我添加的
.pro
文件
DEFINES+=TUFAO_库
中,问题得以解决。现在一切都很好。

链接器找不到
WebSocket::connectToHost
的实现,因此需要链接其中包含该函数的库

在.pro文件中,添加

LIBS += "path/to/lib/libname"
或者,如果它已经在您的库路径中,您可以将

LIBS += -lmylibname
所以我想对你来说,可能是

LIBS += -llibtufao

希望能有所帮助。

还是一样的错误。也许问题出在我的库项目中,它编译了这个库(我文章中的第一个代码)?。。。即使我将所有这些文件添加到我的测试项目中,我也会遇到类似的错误。文件就是unix上静态库的文件类型。您不能将其重命名为.lib文件(windows的静态库)。这可能就是你遇到问题的地方。你在什么操作系统上做这个?嗯,我在WindowsXP32位上编译了这个库。QT Creator创建的项目您使用的是什么编译器?请回答您的问题并将其标记为正确答案。