Я пытаюсь использовать QtWebApp
создать простой сервер веб-приложений, но он показывает некоторые ошибки, которые я не мог понять, как исправить, любой намек, как это исправить?
вот что я сделал:
= загрузка QtWebApp-src.zip
от http://stefanfrings.de/qtwebapp/
= компиляция QtWebApp
с помощью qmake
а также make
успешно завершено
= создать новый qwtest.pro
, содержащий:
QT += core network
QT -= gui
TARGET = qwtest
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
= создать исходный файл main.cpp
, содержащий:
#include "../v1.3.2 2014-01-08/lib/bfHttpServer/src/httplistener.h"#include <QtCore>
class MyController: public HttpRequestHandler {
private:
QCoreApplication *app;
public:
MyController(QCoreApplication *app) : app(app) {}
void service(HttpRequest& request, HttpResponse& response);
};
void MyController::service(HttpRequest& request, HttpResponse& response) {
QByteArray path=request.getPath();
QByteArray username=request.getParameter("username");
response.setHeader("Content-Type", "text/html; charset=ISO-8859-1");
response.setCookie(HttpCookie("myCookie","any value",600));
response.write("<html><body>");
response.write("Hello ");
response.write(username);
response.write("</body></html>");
}
int main(int argc, char *argv[]) {
QCoreApplication* app=new QCoreApplication(argc,argv);
QSettings* settings=new QSettings("configfile.ini",QSettings::IniFormat,app);
MyController* controller=new MyController(app);
HttpListener* listener=new HttpListener(settings,controller,app);
return app->exec();
}
= компиляция с использованием qmake
а также make
/home/foo/qtwebapp/build-QtWebApp-Desktop-Debug/../v1.3.2 2014-01-08/src/main.cpp:66: undefined reference to `Startup::Startup(int, char**)'
/home/foo/qtwebapp/build-QtWebApp-Desktop-Debug/../v1.3.2 2014-01-08/src/main.cpp:67: undefined reference to `QtServiceBase::exec()'
main.o:(.data.rel.ro._ZTV9QtServiceI16QCoreApplicationE[_ZTV9QtServiceI16QCoreApplicationE]+0x28): undefined reference to `QtServiceBase::stop()'
main.o:(.data.rel.ro._ZTV9QtServiceI16QCoreApplicationE[_ZTV9QtServiceI16QCoreApplicationE]+0x30): undefined reference to `QtServiceBase::pause()'
main.o:(.data.rel.ro._ZTV9QtServiceI16QCoreApplicationE[_ZTV9QtServiceI16QCoreApplicationE]+0x38): undefined reference to `QtServiceBase::resume()'
main.o:(.data.rel.ro._ZTV9QtServiceI16QCoreApplicationE[_ZTV9QtServiceI16QCoreApplicationE]+0x40): undefined reference to `QtServiceBase::processCommand(int)'
main.o: In function `Startup::~Startup()':
/home/foo/qtwebapp/build-QtWebApp-Desktop-Debug/../v1.3.2 2014-01-08/src/startup.h:16: undefined reference to `vtable for Startup'
main.o: In function `QtService<QCoreApplication>::~QtService()':
/home/foo/qtwebapp/build-QtWebApp-Desktop-Debug/../v1.3.2 2014-01-08/lib/qtservice/src/qtservice.h:170: undefined reference to `QtServiceBase::~QtServiceBase()'
main.o:(.data.rel.ro._ZTI9QtServiceI16QCoreApplicationE[_ZTI9QtServiceI16QCoreApplicationE]+0x10): undefined reference to `typeinfo for QtServiceBase'
collect2: error: ld returned 1 exit status
Makefile:182: recipe for target 'qwtest' failed
Ваш файл проекта должен содержать источники классов bfHttpServer. Взгляните на файл проекта, который поставляется с примером QtWebapp, там вы увидите, как их включить.
include(lib/bfHttpServer/src/bfHttpServer.pri)
main.cpp: 66: неопределенная ссылка на `Startup :: Startup (int, char **) ‘
Скомпилированный файл main.cpp использует класс Startup из примера приложения. Но main.cpp, который вы разместили выше, этого не делает.
Я предполагаю, что вы компилируете не тот каталог. Или, может быть, вам просто нужно вызвать qmake для обновления некоторых файлов.
Я забыл добавить библиотеки, это то, что я должен добавить на qwtest.pro
файл
LIBS += /home/foo/qtwebapp/qwtest/http*.o \
/home/foo/qtwebapp/qwtest/moc_*.o \
/home/foo/qtwebapp/qwtest/log*.o \
/home/foo/qtwebapp/qwtest/f*.o \
/home/foo/qtwebapp/qwtest/template*.o \
/home/foo/qtwebapp/qwtest/du*.o \
/home/foo/qtwebapp/qwtest/request*.o \
/home/foo/qtwebapp/qwtest/session*.o \
/home/foo/qtwebapp/qwtest/static*.o