Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: drtzuj 09. 12. 2017, 16:30:29

Název: Problémy při kompilaci Qt tutoriálu
Přispěvatel: drtzuj 09. 12. 2017, 16:30:29
Zdravím všechny, rád bych Vás požádal o pomoc.

Nějakou dobu si zkouším jeden Qt tutoriál v Ubuntu ( https://doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html ). Po napsání programu jsem spustil qmake, který vytvořil Makefile, leč v něm nebylo umístění některých tříd. Když jsem na to po trošce bádání přišel, dopsal jsem do něj příslušné umístění ručně přidáním " -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets/" do proměnné "INCPATH" a začal jsem kompilovat s pomocí příkazu make. Po odstranění standardních překlepů a odstranění kódu, který se pravděpodobně vztahuje k verzi 5.9 a ne 5.5, která je v Ubuntu nainstalovaná, se ale objevily chybové hlášení, u kterých sice možná trošku tuším, co znamenají, ale netuším, jak se jich zbavit. Pokud někdo víte, v čem je problém, budu rád, když dáte vědět. Díky za odpovědi.

Některé chybové hlášení (všechny se nevejdou do příspěvku. Ze stejného důvodu jsem sem zatím nedal Makefile):
Kód: [Vybrat]
g++ -m64 -Wl,-O1 -o Main\ window main.o main_window.o qrc_application.o moc_main_window.o   -L/usr/X11R6/lib64 -lQt5Gui -lQt5Core -lGL -lpthread
main.o: In function `main':
main.cpp:(.text.startup+0x4e): undefined reference to `QApplication::QApplication(int&, char**, int)'
main.cpp:(.text.startup+0x23b): undefined reference to `QWidget::show()'
main.cpp:(.text.startup+0x240): undefined reference to `QApplication::exec()'
main.cpp:(.text.startup+0x276): undefined reference to `QMainWindow::~QMainWindow()'
main.cpp:(.text.startup+0x286): undefined reference to `QApplication::~QApplication()'
main.cpp:(.text.startup+0x2fe): undefined reference to `QMainWindow::~QMainWindow()'
main.cpp:(.text.startup+0x311): undefined reference to `QApplication::~QApplication()'
main_window.o: In function `MainWindow::documentWasModified()':
main_window.cpp:(.text+0x9): undefined reference to `QPlainTextEdit::document() const'
main_window.o: In function `MainWindow::about()':
main_window.cpp:(.text+0x10a): undefined reference to `QMessageBox::about(QWidget*, QString const&, QString const&)'
main_window.o: In function `MainWindow::createActions()':
main_window.cpp:(.text+0x219): undefined reference to `QMainWindow::menuBar() const'
main_window.cpp:(.text+0x224): undefined reference to `QMenuBar::addMenu(QString const&)'
main_window.cpp:(.text+0x270): undefined reference to `QMainWindow::addToolBar(QString const&)'
main_window.cpp:(.text+0x38f): undefined reference to `QAction::QAction(QIcon const&, QString const&, QObject*)'
main_window.cpp:(.text+0x3c3): undefined reference to `QAction::setShortcuts(QKeySequence::StandardKey)'
main_window.cpp:(.text+0x3ef): undefined reference to `QAction::setStatusTip(QString const&)'
main_window.cpp:(.text+0x416): undefined reference to `QAction::triggered(bool)'
main_window.cpp:(.text+0x4a1): undefined reference to `QAction::staticMetaObject'
main_window.cpp:(.text+0x4c8): undefined reference to `QWidget::addAction(QAction*)'
main_window.cpp:(.text+0x4d7): undefined reference to `QWidget::addAction(QAction*)'
main_window.cpp:(.text+0x5c3): undefined reference to `QAction::QAction(QIcon const&, QString const&, QObject*)'

...

moc_main_window.o:(.data.rel.ro._ZTV10MainWindow[_ZTV10MainWindow]+0x200): undefined reference to `non-virtual thunk to QWidget::sharedPainter() const'
moc_main_window.o:(.data.rel.ro+0x0): undefined reference to `QMainWindow::staticMetaObject'
collect2: error: ld returned 1 exit status
Makefile:143: recipe for target 'Main window' failed
make: *** [Main window] Error 1
Název: Re:Problémy při kompilaci Qt tutoriálu
Přispěvatel: drtzuj 09. 12. 2017, 16:36:41
Odkaz na Makefile použitý při kompilaci:
https://ulozto.cz/!XnpWwtrmMgOW/makefile
Název: Re:Problémy při kompilaci Qt tutoriálu
Přispěvatel: drtzuj 09. 12. 2017, 16:41:24
Veškeré chyby vypsané v terminálu:
https://ulozto.cz/!yXOYnXIPUpOs/errors#download
Název: Re:Problémy při kompilaci Qt tutoriálu
Přispěvatel: drtzuj 09. 12. 2017, 17:02:31
Tak už se mi podařilo odstranit většinu chyb přidáním

QT += opengl podle tohoto tutoriálu:
      http://www.qtforum.org/article/39309/undefined-reference-to-qapplication.html

Ale pořád mi bohužel zůstávají nějaké chyby, kterých se nemůžu zbavit. Takže pokud někdo tušíte, budu rád.

Kód: [Vybrat]
g++ -m64 -Wl,-O1 -o Main\ window main.o main_window.o qrc_application.o moc_main_window.o   -L/usr/X11R6/lib64 -lQt5OpenGL -lQt5Widgets -lQt5Gui -lQt5Core -lGL -lpthread
moc_main_window.o: In function `MainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) [clone .part.0]':
moc_main_window.cpp:(.text+0x66): undefined reference to `MainWindow::commitData(QSessionManager&)'
collect2: error: ld returned 1 exit status
Makefile:144: recipe for target 'Main window' failed
make: *** [Main window] Error 1
Název: Re:Problémy při kompilaci Qt tutoriálu
Přispěvatel: nou 09. 12. 2017, 19:17:21
Ten tutorial je prilis novy. QSessionManager vyzera byt az od Qt 5.9. Preto by som tu metodu commitData() vymazal.
Název: Re:Problémy při kompilaci Qt tutoriálu
Přispěvatel: Wavelet 09. 12. 2017, 23:32:36
Ukázky kódu na uložto  ??? --- máš doufám github účet ;)?
Název: Re:Problémy při kompilaci Qt tutoriálu
Přispěvatel: drtzuj 10. 12. 2017, 18:07:45
Omlouvám se, že jsem napsal trošku později, ale bohužel jsem měl něco na práci. Nějakým způsobem (netuším přesně jakým, se mi podařilo zbavit se některých popsaných chyb, pravděpodobně editací Main_window.pro, takže jsem nemusel mazat žádné funkce z vygenerovaných souborů. Do Main_window.pro jsem přidal moduly pro qt, takže Main_window.pro vypadá následovně:
Kód: [Vybrat]
######################################################################
# Automatically generated by qmake (3.0) Sun Dec 10 15:04:56 2017
######################################################################

QT += gui
QT += core
QT += opengl
QT += widgets


TEMPLATE = app
TARGET = "Main window"
INCLUDEPATH += .
INCLUDEPATH += /usr/include/x86_64-linux-gnu/qt5/QtWidgets

# Input
HEADERS = main_window.hpp
SOURCES = main.cpp main_window.cpp qrc_application.cpp
RESOURCES = application.qrc

Bohužel se mi ale objevily další chyby s nějakým "multiple definition". Pokud byste někdo věděli, bylo by to fajn.
Název: Re:Problémy při kompilaci Qt tutoriálu
Přispěvatel: drtzuj 10. 12. 2017, 18:09:29
Omlouvám se, že jsem napsal trošku později, ale bohužel jsem měl něco na práci. Nějakým způsobem (netuším přesně jakým, se mi podařilo zbavit se některých popsaných chyb, pravděpodobně editací Main_window.pro, takže jsem ...

Chyby uvádím níže:
Kód: [Vybrat]
Makefile:353: warning: overriding recipe for target 'qrc_application.o'
Makefile:350: warning: ignoring old recipe for target 'qrc_application.o'
/usr/lib/x86_64-linux-gnu/qt5/bin/qmake -o Makefile Main\ window.pro
Makefile:353: warning: overriding recipe for target 'qrc_application.o'
Makefile:350: warning: ignoring old recipe for target 'qrc_application.o'
g++ -m64 -Wl,-O1 -o Main\ window main.o main_window.o qrc_application.o qrc_application.o moc_main_window.o   -L/usr/X11R6/lib64 -lQt5OpenGL -lQt5Widgets -lQt5Gui -lQt5Core -lGL -lpthread
qrc_application.o: In function `qInitResources_application()':
qrc_application.cpp:(.text+0x0): multiple definition of `qInitResources_application()'
qrc_application.o:qrc_application.cpp:(.text+0x0): first defined here
qrc_application.o: In function `qCleanupResources_application()':
qrc_application.cpp:(.text+0x30): multiple definition of `qCleanupResources_application()'
qrc_application.o:qrc_application.cpp:(.text+0x30): first defined here
collect2: error: ld returned 1 exit status
Makefile:147: recipe for target 'Main window' failed
make: *** [Main window] Error 1
Název: Re:Problémy při kompilaci Qt tutoriálu
Přispěvatel: nou 11. 12. 2017, 12:51:04
Nedavat do SOURCES qrc_application.cpp to sa tam da automaticky cez RESOURCES. Ocividne si preskocil X kapitol takze by som odporucil vratit sa na zaciatok a zacat s niecim takymto https://wiki.qt.io/Qt_for_Beginners
Název: Re:Problémy při kompilaci Qt tutoriálu
Přispěvatel: drtzuj 11. 12. 2017, 18:07:50
Nedavat do SOURCES qrc_application.cpp to sa tam da automaticky cez RESOURCES. Ocividne si preskocil X kapitol takze by som odporucil vratit sa na zaciatok a zacat s niecim takymto https://wiki.qt.io/Qt_for_Beginners

Díky za funkční radu, už se to zkompilovalo. Sice mám dojem, že to v sources bylo už automaticky, ale hlavně že vím, kde ta duplicita vlastně vznikla. Už jsem se pomalu začínal hrabat v makefile. :-) Sice jsem na "core dumped", ale to už je něco, s čím se snad pomocí gdb nějak popasuju. Jinak máte pravdu, trošku jsem přeskočil. Kdysi dávno jsem se učil Qt4 z nějaké online knížky, kde jsem se dostal právě až ke tvorbě s pomocí QMainWindow, takže obecně chápu, o co v tom programu jde, ale nikdy jsem hlouběji nerozuměl obsahu souborů, které se vytvářejí po volání qmake (-project), resp. make. Ale díky Bohu za tu chybu, alespoň jsem trošku pochopil organizaci makefile, přestože na ní taky budu muset zapracovat.

A taky díky za odkaz, určitě jej využiju.

Pro uetoyo: Github nemám a kvůli složitějšímu Hello worldu jej ani nechci zakládat. Ale určitě to zvážím, až budu vytvářet programy, o které bude mít smysl se podělit se světem.
Název: Re:Problémy při kompilaci Qt tutoriálu
Přispěvatel: drtzuj 11. 12. 2017, 18:57:38
Jen tak pro info: Už mi to funguje. Já p*** jsem zapomněl inicializovat QPlainTextEdit * textEdit a nacpal jsem to rovnou jako central widget. ::)