0

私は C++ プログラミングの初心者です。Qt 5.0.1 から始めました。https://code.google.com/p/tufao/から WebSockets を使用する必要がありますが、MinGW がインストールされていないため、Qt ライブラリ プロジェクトを作成し、これらのソース ファイルを含めて静的ライブラリを構築できることを Google で検索しました。だから私はそれをやった:

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. したがって、次のステップはそれをテストすることです。簡単なテスト プロジェクトを作成し、[ライブラリの追加] -> [外部] -> [静的] をクリックしてこのライブラリを追加しました。.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

しかし、このテスト プロジェクトをビルドしようとすると、コンパイラ エラーが発生します。

` imp __ZN5Tufao9WebSocket13connectToHostERK12QHostAddresstRK10QByteArrayRKNS_7HeadersE への未定義の参照' collect2.exe:-1:

エラー: ld が 1 つの終了ステータスを返しました

誰でも私を助けることができますか?

よろしく

編集:.proすべてのソースを dest プロジェクトと追加したファイルに追加 することで問題が解決しましDEFINES += TUFAO_LIBRARYた。これで、すべてが正常にコンパイルされます。

4

1 に答える 1

0

外部ライブラリを Qt Creator プロジェクトに追加する

リンカは の実装を見つけることができないため、WebSocket::connectToHostその関数を含むライブラリをリンクする必要があります。

.pro ファイルに次を追加します。

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

または、すでにライブラリ パスにある場合は、

LIBS += -lmylibname

だから私はあなたのために思うかもしれません

LIBS += -llibtufao

それが役立つことを願っています。

于 2013-02-22T18:38:15.363 に答える