Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: deM1d от Ноябрь 11, 2010, 12:55



Название: :: error: collect2: ld returned 1 exit status
Отправлено: deM1d от Ноябрь 11, 2010, 12:55
Привет. У меня такая проблема.

Код:
#ifndef DIALOG_H
#define DIALOG_H
#include <QtGui/QDialog>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);

public slots:
    void tSlot();
signals:
    void tSignal();
};

#endif // DIALOG_H
Выше представлен обычный класс диалога, в котором я просто объявил 1 сигнал и 1 слот. При компиляции у меня появляется ошибка :: error: collect2: ld returned 1 exit status . Путем различных комбинаций я понял что проблема в определении слота. Т.е. если закомменить 2 строки с определением слота, то ошибок не возникает. Ну и вопрос естественно в том, почему это происходит? за ранее спасибо...


Название: Re: :: error: collect2: ld returned 1 exit status
Отправлено: merke от Ноябрь 11, 2010, 13:03
теперь в файле исходниках .cpp опиши класс т.е.

 void Dialog::tSlot();
{

}

и будет счастье

или дял наглядности смотри:

Код:
#ifndef DIALOG_H
#define DIALOG_H
#include <QtGui/QDialog>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);

public slots:
    void tSlot()
   {
     ....
     ....
     ....
   }
signals:
    void tSignal();
};


Название: Re: :: error: collect2: ld returned 1 exit status
Отправлено: deM1d от Ноябрь 11, 2010, 13:23
на самом деле я уже пробовал это раньше... ну вот пример...
Код
#ifndef DIALOG_H
#define DIALOG_H
 
#include <QtGui/QDialog>
 
class QPushButton;
class QLabel;
 
class Dialog : public QDialog
{
   Q_OBJECT
 
public:
   Dialog(QWidget *parent = 0);
   Dialog *p;
 
QLabel *label;
QPushButton *button;
 
public slots:
   void tSlot();
signals:
   void tSignal();
 
};
 
#endif // DIALOG_H
Код
#include "dialog.h"
 
Dialog::Dialog(QWidget *parent)
   : QDialog(parent)
{
   QWidget::connect(p,SIGNAL(tSignal()),p,SLOT(tSlot()));
}
 
void Dialog::tSignal()
{
   p->show();
}
 
void Dialog::tSlot()
{
   p->close();
}
 

За сам код я не отвечаю, т.к. еще не до конца вьехал во всю суть, но вот при компиляции того, что выше все равно ошибка :: error: collect2: ld returned 1 exit status


Название: Re: :: error: collect2: ld returned 1 exit status
Отправлено: Пантер от Ноябрь 11, 2010, 13:25
: error: collect2: ld returned 1 exit status - не сама ошибка. Закинь сюда полный лог сборки.


Название: Re: :: error: collect2: ld returned 1 exit status
Отправлено: deM1d от Ноябрь 11, 2010, 13:27
Выполняется сборка проекта test...
Настройки не изменились, этап qmake пропускается.
Запускается "C:/Qt/QtCreator_2.0.1/mingw/bin/mingw32-make.exe" -w
mingw32-make: Entering directory `C:/Qt/QtProject/test/test-build-desktop'

C:/Qt/QtCreator_2.0.1/mingw/bin/mingw32-make -f Makefile.Debug

mingw32-make[1]: Entering directory `C:/Qt/QtProject/test/test-build-desktop'

g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\4.7.0\include\QtCore" -I"..\..\..\4.7.0\include\QtGui" -I"..\..\..\4.7.0\include" -I"..\..\..\4.7.0\include\ActiveQt" -I"debug" -I"..\test" -I"." -I"..\..\..\4.7.0\mkspecs\win32-g++" -o debug\dialog.o ..\test\dialog.cpp

g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\test.exe debug/main.o debug/dialog.o debug/moc_dialog.o  -L"c:\Qt\4.7.0\lib" -lmingw32 -lqtmaind -lQtGuid4 -lQtCored4

mingw32-make[1]: Leaving directory `C:/Qt/QtProject/test/test-build-desktop'

mingw32-make: Leaving directory `C:/Qt/QtProject/test/test-build-desktop'

debug/moc_dialog.o:C:\Qt\QtProject\test\test-build-desktop/debug/moc_dialog.cpp:86: multiple definition of `Dialog::tSignal()'

debug/dialog.o:C:\Qt\QtProject\test\test-build-desktop/../test/dialog.cpp:10: first defined here

collect2: ld returned 1 exit status

mingw32-make[1]: *** [debug\test.exe] Error 1

mingw32-make: *** [debug] Error 2

Процесс "C:/Qt/QtCreator_2.0.1/mingw/bin/mingw32-make.exe" завершился с кодом %2.
Возникла ошибка при сборке проекта test (цель: Настольный компьютер)
Во время выполнения сборки на этапе "Сборка"

это все из консоли сборки...
в сообщениях о сборке только :: error: collect2: ld returned 1 exit status


Название: Re: :: error: collect2: ld returned 1 exit status
Отправлено: BRE от Ноябрь 11, 2010, 13:36
А это ты для чего написал?
Код
C++ (Qt)
void Dialog::tSignal()
{
   p->show();
}
 

Это не надо, это за тебя moc сделает...  :)


Название: Re: :: error: collect2: ld returned 1 exit status
Отправлено: Пантер от Ноябрь 11, 2010, 13:43
Вот ошибка
debug/moc_dialog.o:C:\Qt\QtProject\test\test-build-desktop/debug/moc_dialog.cpp:86: multiple definition of `Dialog::tSignal()'

debug/dialog.o:C:\Qt\QtProject\test\test-build-desktop/../test/dialog.cpp:10: first defined here


Название: Re: :: error: collect2: ld returned 1 exit status
Отправлено: deM1d от Ноябрь 11, 2010, 13:59
Цитировать
Это не надо, это за тебя moc сделает...
не суть дела))) меня больше интересует, почему не компилит)
Цитировать
Вот ошибка
debug/moc_dialog.o:C:\Qt\QtProject\test\test-build-desktop/debug/moc_dialog.cpp:86: multiple definition of `Dialog::tSignal()'
debug/dialog.o:C:\Qt\QtProject\test\test-build-desktop/../test/dialog.cpp:10: first defined here

Что значит несколько определений? Я в заголовочном файле определяю, а в сипипи пишу реализацию, в чем причина то негодования?


Название: Re: :: error: collect2: ld returned 1 exit status
Отправлено: BRE от Ноябрь 11, 2010, 14:03
Цитировать
Это не надо, это за тебя moc сделает...
не суть дела))) меня больше интересует, почему не компилит)
Цитировать
Вот ошибка
debug/moc_dialog.o:C:\Qt\QtProject\test\test-build-desktop/debug/moc_dialog.cpp:86: multiple definition of `Dialog::tSignal()'
debug/dialog.o:C:\Qt\QtProject\test\test-build-desktop/../test/dialog.cpp:10: first defined here

Что значит несколько определений? Я в заголовочном файле определяю, а в сипипи пишу реализацию, в чем причина то негодования?
Потому и не компилится. Ты описал и moc описал.


Название: Re: :: error: collect2: ld returned 1 exit status
Отправлено: Пантер от Ноябрь 11, 2010, 14:08
Для сигналов не нужна реализация.


Название: Re: :: error: collect2: ld returned 1 exit status
Отправлено: crossly от Ноябрь 11, 2010, 14:09
ибо этим moc занимается... а если вы напишите еще и свою то и получите ошибку...


Название: Re: :: error: collect2: ld returned 1 exit status
Отправлено: deM1d от Ноябрь 13, 2010, 13:27
спасибо всем за помощь)) разъяснили)  ;D