Как заставить Qt работать в Fedora 12 - PullRequest
0 голосов
/ 05 апреля 2011

Qt по умолчанию установлен в Fedora 12. Пробовал программу hello world:

 #include </usr/include/QtGui/QApplication>
 #include </usr/include/QtGui/QPushButton>

 int main(int argc, char *argv[])
 {
   QApplication app(argc, argv);
   QPushButton hello("Hello world!");
   hello.show();
   return app.exec();
}

При обычной компиляции g ++ -o helloWorld helloWorld.cpp, он показывает:

/tmp/ccfEv7zR.o: В функции main': helloWorld.cpp:(.text+0x2a): undefined reference to QApplication :: QApplication (int &, char **, int) 'helloWorld.cpp :(. text + 0x53): неопределенная ссылка на QPushButton::QPushButton(QString const&, QWidget*)' helloWorld.cpp:(.text+0x8b): undefined reference to QApplication :: exec ()'helloWorld.cpp :(. text + 0x99): неопределенная ссылка на QPushButton::~QPushButton()' helloWorld.cpp:(.text+0xac): undefined reference to QPushButton :: ~ QPushButton () 'helloWorld.cpp :(. text + 0xc0): неопределенная ссылка на QApplication::~QApplication()' helloWorld.cpp:(.text+0xdc): undefined reference to QApplication :: ~ QApplication ()'/tmp/ccfEv7zR.o: в функции QString::QString(char const*)': helloWorld.cpp:(.text._ZN7QStringC1EPKc[QString::QString(char const*)]+0x1d): undefined reference to QString :: fromAscii_helper (char const *, int) '/tmp/ccfEv7zR.o: в функции QString::~QString()': helloWorld.cpp:(.text._ZN7QStringD1Ev[QString::~QString()]+0x2d): undefined reference to QString :: free (QString :: Data *)' collect2:ld вернул 1 состояние выхода bash: ./helloWorld: нет такого файла или каталога

и с

qmake -project; qmake; make

показывает:

/ usr / lib64 / qt-3.3 / bin / moc /usr/include/QtGui/qapplication.h -o /usr/include/QtGui/moc_qapplication.cpp moc:Не удается создать / usr / include / QtGui / moc_qapplication.cpp make: * [/usr/include/QtGui/moc_qapplication.cpp] Ошибка 1

Есть идеи, как заставить его работать?

ОБНОВЛЕНИЕ:
Мой cpp уже находился в каталоге, недоступном только для чтения.Теперь я изменил заголовок на

#include <QApplication>
#include <QPushButton>

, и он показывает эту ошибку:

g ++ -c -pipe -Wall -W -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE = 2 -fexceptions -fstack-protector --param = ssp-buffer-size = 4 -m64 -mtune = универсальный -DQT_NO_DEBUG -I / usr / lib64 / qt-3.3 / mkspecs / default -I.-Я.-I / usr / lib64 / qt-3.3 / include -o helloWorld.o helloWorld.cpp
helloWorld.cpp: 1: 25: ошибка:
QApplication: нет такого файла или
каталог helloWorld.cpp:2:24: ошибка:
QPushButton: нет такого файла или каталога
helloWorld.cpp: в функции 'int
main (int, char *)': helloWorld.cpp: 7:
ошибка: «QApplication» не было объявлено
в этой области helloWorld.cpp: 7: ошибка:
ожидается ';'до 'app'
helloWorld.cpp: 8: ошибка: 'QPushButton'
не была объявлена ​​в этой области
helloWorld.cpp: 8: ошибка: ожидается ';'
до 'hello' helloWorld.cpp: 9:
ошибка: 'hello' не было объявлено в
этой области helloWorld.cpp: 10: ошибка:
'app' не было объявлено в этой области
helloWorld.cpp: Atглобальная область действия:
helloWorld.cpp: 5: предупреждение: не используется
параметр 'argc' helloWorld.cpp: 5:
предупреждение: не используется параметр 'argv' make:
*
* [helloWorld.o] Ошибка 1

Ответы [ 2 ]

3 голосов
/ 05 апреля 2011

Проблема в том, что / usr / include / QtGui / "защищен" .(У вас нет разрешения на запись в этот каталог)

Переместите ваш helloworld.cpp в каталог, к которому у вас есть права на запись.Например /home/yourusername/helloworld/helloworld.cpp

Изменить:

#include </usr/include/QtGui/QApplication>
#include </usr/include/QtGui/QPushButton>

Кому:

#include <QApplication>
#include <QPushButton>

Затем попробуйте:

qmake -project
qmake
make

Я предлагаю вам немного прочитать о , используя qmake .Затем вы поймете, почему у вас возникла первая ошибка: qmake поможет вам выполнить шаг включений и правильных библиотек, создав для вас Makefile.

Редактировать:

Другойнужно убедиться, что qmake находится на вашем пути и, если необходимо, установлена ​​ли переменная окружения QTDIR.

0 голосов
/ 06 апреля 2011

Из вашего журнала компиляции ясно, что вы используете Qt 3.3.

Это объясняет, почему вы все еще не можете заставить его работать.Заголовки в стиле CamelCase, такие как QPushButton, были представлены в Qt 4.0.

Скорее всего, вы использовали Qt 3.3 случайно.Убедитесь, что вы запускаете qmake из Qt 4. Во многих дистрибутивах Linux он установлен как qmake-qt4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...