Russian Qt Forum
Ноябрь 25, 2024, 08:45
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Помогите начинающему. Connect SIGNAL to SLOT
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Помогите начинающему. Connect SIGNAL to SLOT (Прочитано 13755 раз)
bigboa
Гость
Помогите начинающему. Connect SIGNAL to SLOT
«
:
Апрель 27, 2010, 20:50 »
Доброго времени суток.
Появилась необходимось написать программу под linux.
Программа должна слушать TCP порт и в зависимости от полученных данных отправлять клиенту ответ. На системе, на которой писал и собирал проект все работает отлично. А вот на других системах не работает. Для тестов поставил KUbuntu 9.10. Запускаю на ней свою программу и получаю в ответ : Segmentation fault.
Поставил valgrind и запустил с ним свою программу и вот что получил:
==2146== Memcheck, a memory error detector
==2146== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==2146== Using Valgrind-3.5.0-Debian and LibVEX; rerun with -h for copyright info
==2146== Command: ./test
==2146==
==2146== Invalid read of size 4
==2146== at 0x429550D: QMetaObject::indexOfSlot(char const* ) const (in /usr/lib/libQtCore.so.4.5.2)
==2146== by 0x42A1268: QObject::connect(QObject const*, char const*, QObject const*, char const*, Qt::ConnectionType) (in /usr/lib/libQtCore.so.4.5.2)
==2146== by 0x8049686: CNetServer::CNetServer() (cnetserver.cpp: 8 )
==2146== by 0x8049454: main (main.cpp: 8 )
==2146== Address 0x10 is not stack'd, malloc'd or (recently) free'd
==2146==
==2146==
==2146== Process terminating with default action of signal 11 (SIGSEGV)
==2146== Access not within mapped region at address 0x10
==2146== at 0x429550D: QMetaObject::indexOfSlot(char const* ) const (in /usr/lib/libQtCore.so.4.5.2)
==2146== by 0x42A1268: QObject::connect(QObject const*, char const*, QObject const*, char const*, Qt::ConnectionType) (in /usr/lib/libQtCore.so.4.5.2)
==2146== by 0x8049686: CNetServer::CNetServer() (cnetserver.cpp: 8 )
==2146== by 0x8049454: main (main.cpp: 8 )
==2146== If you believe this happened as a result of a stack
==2146== overflow in your program's main thread (unlikely but
==2146== possible), you can try to increase the size of the
==2146== main thread stack using the --main-stacksize= flag.
==2146== The main thread stack size used in this run was 8388608.
==2146==
==2146== HEAP SUMMARY:
==2146== in use at exit: 82,312 bytes in 304 blocks
==2146== total heap usage: 2,105 allocs, 1,801 frees, 164,108 bytes allocated
==2146==
==2146== LEAK SUMMARY:
==2146== definitely lost: 0 bytes in 0 blocks
==2146== indirectly lost: 0 bytes in 0 blocks
==2146== possibly lost: 68,944 bytes in 43 blocks
==2146== still reachable: 13,368 bytes in 261 blocks
==2146== suppressed: 0 bytes in 0 blocks
==2146== Rerun with --leak-check=full to see details of leaked memory
==2146==
==2146== For counts of detected and suppressed errors, rerun with: -v
==2146== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 39 from 10)
Segmentation fault
Как я понял, ругается он именно на эту строчку в конструкторе класса:
...
connect (&server,SIGNAL(newConnection()),this,SLOT(acceptConnection()));
...
если ее закоментировать, то Segmentation fault не появляется.
Подскажите, пожалуйста, что все это означает и почему на системе на которой я собирал проект все работает???
Проект собран c помощью Qt Creator 1.3, Build Configuration -> Release.
Записан
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Помогите начинающему. Connect SIGNAL to SLOT
«
Ответ #1 :
Апрель 27, 2010, 20:58 »
на Kubuntu тоже пересоберите, а потом уже запускайте
Записан
ArchLinux x86_64 / Win10 64 bit
BRE
Гость
Re: Помогите начинающему. Connect SIGNAL to SLOT
«
Ответ #2 :
Апрель 27, 2010, 21:00 »
Слишком мало информации.
Покажи код, хотя бы кусками, с пояснениями где вызывается connect, что в слоте acceptConnection, используются другие потоки или нет...
Попробуй использовать Qt по новее, сейчас уже 4.6.2.
Записан
bigboa
Гость
Re: Помогите начинающему. Connect SIGNAL to SLOT
«
Ответ #3 :
Апрель 27, 2010, 21:13 »
Я пишу тоже на KUbuntu 9.10.
CNetServer::CNetServer()
{
server.listen(QHostAddress::Any,36036);
connect (&server,SIGNAL(newConnection()),this,SLOT(acceptConnection()));
}
CNetServer::~CNetServer()
{
server.close();
}
void CNetServer::acceptConnection()
{
//пусто
}
Записан
bigboa
Гость
Re: Помогите начинающему. Connect SIGNAL to SLOT
«
Ответ #4 :
Апрель 27, 2010, 21:16 »
Я пишу на Qt 4.6.2. Может в этом и проблема? Может на тестовой машине стоит Qt версией ниже, если из-за этого то как мне обновить QtCore?
Записан
BRE
Гость
Re: Помогите начинающему. Connect SIGNAL to SLOT
«
Ответ #5 :
Апрель 27, 2010, 21:19 »
Цитата: bigboa от Апрель 27, 2010, 21:16
Я пишу на Qt 4.6.2. Может в этом и проблема? Может на тестовой машине стоит Qt версией ниже, если из-за этого то как мне обновить QtCore?
Подожди, ты собираешь программу с Qt 4.6.2, а потом просто копируешь бинарник на другую машину?
На тестовой машине судя по этому используется 4.5.2
Цитировать
==2146== at 0x429550D: QMetaObject::indexOfSlot(char const* ) const (in /usr/lib/libQtCore.so.
4.5.2
)
Записан
bigboa
Гость
Re: Помогите начинающему. Connect SIGNAL to SLOT
«
Ответ #6 :
Апрель 27, 2010, 21:25 »
Цитата: BRE от Апрель 27, 2010, 21:19
Подожди, ты собираешь программу с Qt 4.6.2, а потом просто копируешь бинарник на другую машину?
Именно так, я совсем новичек в создании программ под линукс, мне кажется что так и надо делать или нет?
Записан
BRE
Гость
Re: Помогите начинающему. Connect SIGNAL to SLOT
«
Ответ #7 :
Апрель 27, 2010, 21:27 »
Цитата: bigboa от Апрель 27, 2010, 21:25
Именно так, я совсем новичек в создании программ под линукс, мне кажется что так и надо делать или нет?
Нужно собрать программу из исходников на целевой машине.
Записан
bigboa
Гость
Re: Помогите начинающему. Connect SIGNAL to SLOT
«
Ответ #8 :
Апрель 27, 2010, 21:43 »
Скопировал исходники, делаю make, не компилит, требует makefile. Как его сгенерить или его надо писать?
Записан
BRE
Гость
Re: Помогите начинающему. Connect SIGNAL to SLOT
«
Ответ #9 :
Апрель 27, 2010, 21:45 »
Цитата: bigboa от Апрель 27, 2010, 21:43
Скопировал исходники, делаю make, не компилит, требует makefile. Как его сгенерить или его надо писать?
А файл с расширением .pro присутствует?
Тогда сделай:
qmake
make
Записан
bigboa
Гость
Re: Помогите начинающему. Connect SIGNAL to SLOT
«
Ответ #10 :
Апрель 27, 2010, 21:58 »
файл .pro есть.
qmake
make
make: Nothing to be done for `first`
Записан
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Помогите начинающему. Connect SIGNAL to SLOT
«
Ответ #11 :
Апрель 28, 2010, 07:20 »
Цитировать
Цитата: BRE от Апрель 27, 2010, 22:19
Подожди, ты собираешь программу с Qt 4.6.2, а потом просто копируешь бинарник на другую машину?
Именно так, я совсем новичек в создании программ под линукс, мне кажется что так и надо делать или нет?
я ж уже тоже самое писал.. неужели никто не слышит?
Цитировать
на Kubuntu тоже пересоберите, а потом уже запускайте
Цитировать
make: Nothing to be done for `first`
а пакеты для девелопинга в Kubuntu установлены?
Записан
ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Помогите начинающему. Connect SIGNAL to SLOT
«
Ответ #12 :
Апрель 28, 2010, 07:22 »
Цитировать
файл .pro есть.
если *.pro есть, то делать нужно:
Цитировать
#make distclean
#qmake yuor.pro
#make
Записан
ArchLinux x86_64 / Win10 64 bit
bigboa
Гость
Re: Помогите начинающему. Connect SIGNAL to SLOT
«
Ответ #13 :
Апрель 28, 2010, 11:14 »
Цитировать
а пакеты для девелопинга в Kubuntu установлены?
Я совсем новичек в программировании под linux, выходит чтоб запустить бинарник на другой системе, туда надо поставить чуть ли ни тот же SDK в котором он собирался, скомпилировать его, а уж потом запускать, так?
Есть ли, в принципе, возможность распространения софта под linux без перекомпеляции?
Записан
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Помогите начинающему. Connect SIGNAL to SLOT
«
Ответ #14 :
Апрель 28, 2010, 11:23 »
Цитировать
Я совсем новичек в программировании под linux, выходит чтоб запустить бинарник на другой системе, туда надо поставить чуть ли ни тот же SDK в котором он собирался, скомпилировать его, а уж потом запускать, так?
1. Суть в том, что разных дистрибутивов Gnu/Linux целый зоопарк. В каждом дистрибутиве могут быть разные версии libc, Glibc и т.д. и т.п. Поэтому бинарик, собранный в одном дистре может не работать в другом дистре. Для того чтобы оно заработало нужно учитывать много нюансов.
2. SDK нужно ставить только если вы что-то компилировать собрались. И не "тот же" - а обычный "стандартный" набор утилит для сборки приложений.
3. Linux - это вам не винда с одинаковыми *.dll и API, поэтому параллели тут не работают.
Цитировать
Есть ли, в принципе, возможность распространения софта под linux без перекомпеляции?
1. Да. При этом вы должны собрать свое приложение с нюансами:
- где возможно - статически линковать
- где возможно - использовать спец. ключи
- и т.п.
с целью как можно сильнее уменьшить зависимость вашего бинарика от системных библиотек GNU/Linux
2. НО обычно так никто не поступает (кроме некоторых крупных компаний - "жмотошников" и разнообразных индивидуумов которые хотят наварить денег и что-то там скрыть
)
«
Последнее редактирование: Апрель 28, 2010, 11:29 от kuzulis
»
Записан
ArchLinux x86_64 / Win10 64 bit
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...