Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: a_n_y_a от Апрель 06, 2009, 14:12



Название: Компиляция Qt-3.3.3 Приложение Hello!!! Не линкуется.
Отправлено: a_n_y_a от Апрель 06, 2009, 14:12
Есть программка:

Код
C++ (Qt)
#include <qapplication.h>
#include <qlabel.h>
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   return app.exec();
}

Выдает следующее:
[root@localhost Hello]# qmake -project
[root@localhost Hello]# qmake Hello.pro
[root@localhost Hello]# make
g++ -c -pipe -D_REENTRANT -Wall -W  -DQT_NO_DEBUG -I/usr/lib/qt-3.3.3/mkspecs/default -I. -I. -I/usr/lib/qt-3.3.3/include -o Hello.o Hello.cpp
g++  -o Hello Hello.o    -L/usr/lib/qt-3.3.3/lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm
Hello.o(.text+0x20): In function `main':
: undefined reference to `QApplication::QApplication[in-charge](int&, char**)'
Hello.o(.text+0x2f): In function `main':
: undefined reference to `QApplication::exec()'

И так далее. В чем проблемка? Только что поставил Qt3.3.3 на MC BC 3.0
Поставилось без проблем. Решил провермть элементарной программкой.


Название: Re: Компиляция Qt-3.3.3 Приложение Hello!!! Не линкуется.
Отправлено: a_n_y_a от Апрель 07, 2009, 14:59
Всем спасибо за помощь, разобрался. Дело было в версии gcc.


Название: Re: Компиляция Qt-3.3.3 Приложение Hello!!! Не линкуется.
Отправлено: a_n_y_a от Апрель 08, 2009, 08:33
Работаю в  Ос МС ВС 3.0
   Тестирую компилятор на элементарной програмке Hello.
#include <qapplication.h>
#include <qlabel.h>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QLabel *label = new QLabel("Hello, Qt!", 0);
    app.setMainWidget(label);
    label->show();
    return app.exec();
}
Сначала перехожу на транслятор 2.95, все компилится, собирается и работает:
[root@localhost ~]# gccv2
[root@localhost ~]# cd /usr/Hello
[root@localhost Hello]# qmake -project
[root@localhost Hello]# qmake Hello.pro
[root@localhost Hello]# make
/usr/lib/qt-3.3.3/include -o Hello.o Hello.cpp
g++  -o Hello Hello.o    -L/usr/lib/qt-3.3.3/lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm

Потом перехожу на транслятор 3.3, произвожу те же действия, но программка не линкуется:
Что я сделал не правильно?
[root@localhost Hello]# gccv3
[root@localhost Hello]# qmake -project
[root@localhost Hello]# qmake Hello.pro
[root@localhost Hello]# make
/usr/lib/qt-3.3.3/include -o Hello.o Hello.cpp
g++  -o Hello Hello.o    -L/usr/lib/qt-3.3.3/lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm
Hello.o(.text+0x23): In function `main':
: undefined reference to `QApplication::QApplication[in-charge](int&, char**)'
Hello.o(.text+0x57): In function `main':
: undefined reference to `QString::QString[in-charge](char const*)'
Hello.o(.text+0x66): In function `main':
: undefined reference to `QLabel::QLabel[in-charge](QString const&, QWidget*, char const*, unsigned)'                   
и так далее.


Название: Re: Компиляция Qt-3.3.3 Приложение Hello!!! Не линкуется.
Отправлено: Rcus от Апрель 08, 2009, 08:52
А Qt пересобрать под другую версию компилятора? Насколько модули собранные разными мажорными версиями GCC бинарно несовместимы.


Название: Re: Компиляция Qt-3.3.3 Приложение Hello!!! Не линкуется.
Отправлено: a_n_y_a от Апрель 09, 2009, 08:25
А Qt пересобрать под другую версию компилятора? Насколько модули собранные разными мажорными версиями GCC бинарно несовместимы.

Собрать другую версию библиотеки не удается. Смотри тему
Установка на MC BC 3.0 Qt4.4.1, не конфигурируется


Название: Re: Компиляция Qt-3.3.3 Приложение Hello!!! Не линкуется.
Отправлено: Примерный ученик от Апрель 09, 2009, 17:23
А Qt пересобрать под другую версию компилятора? Насколько модули собранные разными мажорными версиями GCC бинарно несовместимы.

Собрать другую версию библиотеки не удается. Смотри тему
Установка на MC BC 3.0 Qt4.4.1, не конфигурируется

Прочитайте внимательно Readme.txt из установочного диска MCВС
\MCBC\RPMS\extools

Цитирую:

Следует учитывать тот факт, что компиляторы gcc 2.95.4 и gcc 3.3.2 имеют
различия в ABI (трансляции имен) для языка программирования C++. Что приводит
к затруднению совместного использования объектного кода написанного на C++
и собранного под компиляторами разных версий.

     Поскольку ОС МСВС 3.0 собрана на компиляторе gcc 2.95.4, существующие
системные библиотеки разработанные на языке C++ будут иметь проблемы при
связывании с программами вновь разрабатываемыми при помощи gcc 3.3.2.

     Для выхода из данной ситуации предлагается, при использовании gcc 3.3.2
разрабатывать автономные (самодостаточные) проекты C++, либо дополнительно
создавать и использовать библиотеки-прослойки (wrappers) для обращения к
необходимым системным функциям C++ из состава ОС МСВС 3.0.

    Естественно, что функции стандартной библиотеки C++ для gcc 3.3.2 будут
доступны без каких бы то ни было ограничений, поскольку для компиляторов
gcc 2.95.4 и gcc 3.3.2 они уникальны и обе поставляются в составе ОС МСВС 3.0

     При сборке программ на "чистом" C проблем возникать не должно.