Russian Qt Forum
Ноябрь 24, 2024, 18:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сборка Qt на сервере FreeBSD без X11 + "Hello World!"  (Прочитано 7802 раз)
rain107
Гость
« : Октябрь 15, 2010, 02:32 »

Всем Доброго времени суток!

Стоит задача собрать Qt без Gui на сервере и, для начала, написать простейшую программу.
ОС: FreeBSD 7.2 без графической оболочки.
Целевое приложение имеет клиент-серверную архитектуру. Проблема, на данный момент, в серверной части, основной задачей которой является передача клиентам, по их запросу, файлов изображений и видео (возможно придется организовать потоковое вещание видеоконтента вебкамер в реальном времени). Соответственно необходимы будут библиотеки для роботы с сетью, SQL, XML...

Собрать Qt у меня вроде как получилось (http://www.prog.org.ru/index.php?topic=8428.msg46296;topicseen#msg46296) , а вот запустить банальный "Hello World" - не очень. При запуске написанного приложения вместо вывода "Hello World!" пропадает приглашение командной оболочки и я могу вводить любые символы, нажимаю Ентер, а реакции никакой. Только после прерывания программы вновь появляется приглашение командной оболочки.



Дело происходило так:

cd ~/downloads/
# uncompress the archive
gunzip qt-everywhere-opensource-src-4.7.0.tar.gz        
# unpack it
tar xvf qt-everywhere-opensource-src-4.7.0.tar         
#configure without gui
[user1@server] ~/downloads/qt-everywhere-opensource-src-4.7.0]$ ./configure -no-gui
#...
Qt is now configured for building. Just run 'gmake'.
Once everything is built, you must run 'gmake install'.
Qt will be installed into /usr/local/Trolltech/Qt-4.7.0

To reconfigure, run 'gmake confclean' and 'configure'.

[user1@server ~/downloads/qt-everywhere-opensource-src-4.7.0/src/tools/moc]$ gmake
#................................................
/usr/bin/ld: cannot find -lbootstrap
gmake: *** [../../../bin/moc] Error 1

#пробую
[user1@server ~/downloads/qt-everywhere-opensource-src-4.7.0/src/corelib]$ gmake
#в результате
#......
gmake: /usr/home/user1/downloads/qt-everywhere-opensource-src-4.7.0/bin/moc: Command not found
gmake: *** [.moc/release-shared/moc_qabstractanimation.cpp] Error 127

[user1@server ~/downloads/qt-everywhere-opensource-src-4.7.0/src/tools/bootstrap]$ gmake
#.....
#чтото получилось

[user1@server ~/downloads/qt-everywhere-opensource-src-4.7.0/src/tools/moc]$ gmake
g++ -Wl,-rpath-link,/usr/home/user1/downloads/qt-everywhere-opensource-src-4.7.0/lib -Wl,-O1 -Wl,-rpath,/usr/local/Trolltech/Qt-4.7.0/lib -Wl,-rpath,/usr/local/Trolltech/Qt-4.7.0/lib -o ../../../bin/moc release-shared/moc.o release-shared/preprocessor.o release-shared/generator.o release-shared/parser.o release-shared/token.o release-shared/main.o    -L/usr/local/lib -L/usr/home/user1/downloads/qt-everywhere-opensource-src-4.7.0/src/tools/bootstrap -lbootstrap -L/usr/local/lib -lz -lz
(test -z "../../../bin/" || cd "../../../bin/" ; targ=`basename ../../../bin/moc`; objcopy --only-keep-debug "$targ" "$targ.debug" && objcopy --strip-debug "$targ" && objcopy --add-gnu-debuglink="$targ.debug" "$targ" && chmod -x "$targ.debug" ) ;

[user1@server ~/downloads/qt-everywhere-opensource-src-4.7.0/src/corelib]$ gmake
#.....

[user1@server /usr/local]$ sudo -s
[root@server ~/downloads/qt-everywhere-opensource-src-4.7.0/src/corelib]$ gmake install
#все поставилось

#Дальше ставлю все необходимые библиотеки отдельно:
[root@server /usr/home/user1/downloads/qt-everywhere-opensource-src-4.7.0/src/network]$ gmake
[root@server /usr/home/user1/downloads/qt-everywhere-opensource-src-4.7.0/src/network]$ gmake install
[root@server /usr/home/user1/downloads/qt-everywhere-opensource-src-4.7.0/src/sql]# gmake
[root@server /usr/home/user1/downloads/qt-everywhere-opensource-src-4.7.0/src/sql]# gmake install
[root@server /usr/home/user1/downloads/qt-everywhere-opensource-src-4.7.0/src/xml]# gmake
[root@server /usr/home/user1/downloads/qt-everywhere-opensource-src-4.7.0/src/xml]# gmake install
[root@server /usr/home/user1/downloads/qt-everywhere-opensource-src-4.7.0/src/dbus]# gmake
[root@server /usr/home/user1/downloads/qt-everywhere-opensource-src-4.7.0/src/dbus]# gmake install



#продолжаем настройку
[user1@server /usr/home/user1/downloads/qt-everywhere-opensource-src-4.7.0]$ sudo gmake install_mkspecs
[user1@server ~]$ sudo cp downloads/qt-everywhere-opensource-src-4.7.0/bin/qmake /usr/local/Trolltech/Qt-4.7.0/bin/
[user1@server ~]$ sudo cp downloads/qt-everywhere-opensource-src-4.7.0/bin/findtr /usr/local/Trolltech/Qt-4.7.0/bin/
[user1@server ~]$ sudo cp downloads/qt-everywhere-opensource-src-4.7.0/bin/syncqt /usr/local/Trolltech/Qt-4.7.0/bin/

#Изменяем переменную PATH, для этого изменяем файл .profile из моей домашней директории
[user1@server ~]$ vim .profile
#Дописываем в файл
# …
PATH=/usr/local/Trolltech/Qt-4.7.0/bin:$PATH
export PATH
#…
Перезапускаем bash и пробуем запустить утилиту qmake без указания ее полного пути
[user1@server ~/qt/helloworld]$ qmake helloworld.pro
#Ура заработало!!!!

main.cpp:
Код:
#include <QtCore/QCoreApplication>
#include <iostream>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    std::cout << "Hello World";
    return a.exec();
}

Helloworld.pro:
Код:
#-------------------------------------------------
#
# Project created by QtCreator 2010-10-11T09:33:03
#
#-------------------------------------------------
QT       += core
QT       -= gui
TARGET = helloworld
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE = app
SOURCES += main.cpp


#Собираем и запускаем проект:
[user1@server ~/qt/helloworld]$ qmake helloworld.pro
[user1@server ~/qt/helloworld]$ make
[user1@server ~/qt/helloworld]$ ./helloworld


#И в результате имею ранее описанный эфект(((


Подскажите пожалуйста, может в чем то я был неправ?! Я вообще планирую делать этот проект из-под Винды а потом исходники копировать и компилировать на сервере... Я же так понимаю, что при помощи Qt, установленной на Windows, не удастся собрать приложение для FreeBSD?!
Записан
BRE
Гость
« Ответ #1 : Октябрь 15, 2010, 07:52 »

Ну как бы программа делает ровно то, что ты написал.  Улыбающийся
Поток std::cout буферизирован и данные из этого буфера не выталкиваются для того чтобы они вывелись на экран, а потом запускается цикл обработки событий, который никем не завершается.
Записан
rain107
Гость
« Ответ #2 : Октябрь 15, 2010, 09:16 »

А как же тогда вывести на экран строку Непонимающий
Записан
merke
Гость
« Ответ #3 : Октябрь 15, 2010, 09:55 »

#include <QtCore/QCoreApplication>
#include <iostream>
#include <conio>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    std::cout << "Hello World";
    getch();
}
Записан
Sahab
Гость
« Ответ #4 : Октябрь 15, 2010, 10:04 »

std::flush
Цитировать
   
QCoreApplication a(argc, argv);
std::cout << "Hello World";
getch();
- угу... а потом опять вопросы почему у меня не работает то-сё
Записан
Sahab
Гость
« Ответ #5 : Октябрь 15, 2010, 10:08 »

Цитировать
при помощи Qt не удастся собрать приложение для FreeBSD?!
?
qt ничего не собирает...
а по сути ставь се putty - коннект на сервер - и собирай...
Записан
rain107
Гость
« Ответ #6 : Октябрь 15, 2010, 10:12 »

Цитировать
при помощи Qt не удастся собрать приложение для FreeBSD?!
?
qt ничего не собирает...
а по сути ставь се putty - коннект на сервер - и собирай...

Именно так и работаю...
Записан
BRE
Гость
« Ответ #7 : Октябрь 15, 2010, 10:57 »

А как же тогда вывести на экран строку Непонимающий
Почитай про std::endl;
Записан
rain107
Гость
« Ответ #8 : Октябрь 15, 2010, 14:30 »

А как же тогда вывести на экран строку Непонимающий
Почитай про std::endl;


А при чем здесь символ перевода строки, если проблема в том, что содержимое буфера не выводится в командной оболочке bash при использовании потока вывода std::cout?!

Ну как бы программа делает ровно то, что ты написал.  Улыбающийся
Поток std::cout буферизирован и данные из этого буфера не выталкиваются для того чтобы они вывелись на экран, а потом запускается цикл обработки событий, который никем не завершается.
« Последнее редактирование: Октябрь 15, 2010, 14:32 от rain107 » Записан
BRE
Гость
« Ответ #9 : Октябрь 15, 2010, 15:13 »

А при чем здесь символ перевода строки, если проблема в том, что содержимое буфера не выводится в командной оболочке bash при использовании потока вывода std::cout?!
А std::endl и данные из буфера выталкивает.
Записан
rain107
Гость
« Ответ #10 : Октябрь 15, 2010, 15:26 »

А при чем здесь символ перевода строки, если проблема в том, что содержимое буфера не выводится в командной оболочке bash при использовании потока вывода std::cout?!
А std::endl и данные из буфера выталкивает.


 Смеющийся
От блин!!! Вот же дурацкая голова!!! А я столько перемучался)))

BRE, Большое тебе СПАСИБО!!!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.117 секунд. Запросов: 21.