Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: teele - 23.03.15 - klo:16.31

Otsikko: [ratkaistu] Qt (4 tai 5) ja Qwt6 toimimaan Ubuntu 14.04:ssä
Kirjoitti: teele - 23.03.15 - klo:16.31
Laitoin uutena asennuksena Ubuntu 14.04:ssä

Koodia: [Valitse]
sudo apt-get install qt4-dev-tools
sudo apt-get install libqwt-dev


mutta virheeksi tulee

Koodia: [Valitse]
In file included from qwtkoe04.cpp:7:0:
qwtkoe04.h:5:29: fatal error: QApplication: Tiedostoa tai hakemistoa ei ole
 #include <QApplication>

Vasta jälkeen päin huomasin, että edellä olevat apt-get -asennukset olin ajanut siitä hakemistosta, jossa on kokeiluohjelmanikin, mutta ei kai se vaikuta siihen, miten Ubuntu asentaa Qt:n ja Qwt:n?

Joku perusasia on väärin asennuksessani, koska QApplication -tiedostoa ei löydy.

.pro -tiedosto on tällainen (lisäilin siihen sitten kokeiluissa CONFIG:n ja widgetit, LIBSit ja INCLUDEPATH ovat lisäyksiä ennen toimineesta .pro -tiedostosta)

Koodia: [Valitse]
######################################################################
# Automatically generated by qmake (3.0) ma maaliskuuta 23 16:07:02 2015
######################################################################

TEMPLATE = app
TARGET = qwtkoe04
INCLUDEPATH += .

# Input
HEADERS += qwtkoe04.h
SOURCES += qwtkoe04.cpp

# lisäsin nämä 2 riviä, mutta ei auta
CONFIG += qwt
Qt += widgets


# nämä kaksi riviä on lisättävä käsin, ainakin ennen toimi näillä
CONFIG += qwt
INCLUDEPATH += /usr/include/qwt
LIBS += -lqwt


Miten saisin qt:n ja qwt:n taas toimimaan?



Otsikko: Vs: Qt (4 tai 5) ja Qwt6 toimimaan Ubuntu 14.04:ssä
Kirjoitti: nm - 24.03.15 - klo:19.02
# lisäsin nämä 2 riviä, mutta ei auta
CONFIG += qwt
Qt += widgets

Tuossa pitäisi olla QT += widgets
Otsikko: Vs: Qt (4 tai 5) ja Qwt6 toimimaan Ubuntu 14.04:ssä
Kirjoitti: teele - 25.03.15 - klo:22.37
Kiitos oikaisusta, nyt on siis palattu lähtöruutuun eli siihen tilanteeseen, joka oli ennen kuin aloin uudelleen asentamaan qt:tä ja qwt:tä. Siinä jossain vaiheessa sitten QT ja Qt menivät sekaisin.

Alun perin ongelma oli se, että saan koeohjelman käännettyä koneella, jossa on Ubuntu 12.04 ja ohjelma toimii myös siinä 14.04 koneessa, jossa kääntäminen menee muuten läpi ilman virheilmoituksia, mutta kun käännetyn ohjelman ajaa, tulee virheeksi muistialueen ylitys (luotiin core-tiedosto). Muistaakseni 12.04 -koneessa on samat paketit kuin 14.04 -koneessa.

Koska  12.04 - koneessa käännettynä ohjelma toimii kummassakin koneessa, kuvittelisin ohjelman sinällään olevan suurin piirtein oikein. Mutta miten pääsisi sen muistialueen ylityksen jäljille. Jotenkinhan se riippuu jostain eroista koneiden välillä.


Otsikko: Vs: Qt (4 tai 5) ja Qwt6 toimimaan Ubuntu 14.04:ssä
Kirjoitti: nm - 26.03.15 - klo:01.46
Mutta miten pääsisi sen muistialueen ylityksen jäljille. Jotenkinhan se riippuu jostain eroista koneiden välillä.

Debuggerilla voi selvitellä, joskin hankalammissa tapauksissa backtracen tulkinta voi olla vaikeaa.

Voit myös yksinkertaisesti kommentoida koodia pois käytöstä ja takaisin käyttöön, kunnes ongelman aiheuttava kohta on haarukoitu. Onnistuu nopeimmin binäärihaun tapaan, eli esim. pääfunktiossa puolet koodista pois ja testaus. Jos ohjelma käynnistyy, vika oli kommentoidussa osassa. Jos ei toimi vieläkään, vika on siinä osassa, jota ei ole kommentoitu. Sitten tutkimista voi jatkaa samaan tapaan siinä osassa koodia, johon vika on paikannettu.
Otsikko: Vs: Qt (4 tai 5) ja Qwt6 toimimaan Ubuntu 14.04:ssä
Kirjoitti: teele - 26.03.15 - klo:18.56

Tässä olisi vähän lisähavaintoja. Yritin selvittää asiaa koodia poistamalla ohjelmasta rivejä.

Ohjelma on nyt aika lyhyt, ja se näyttä vain qwt:n kaavion ilman kuvaajaa. Käänsin sen 12.04 koneella, jossa on qt ja qwt viime keväältä.

Koodia: [Valitse]
#include <QApplication>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>

int main(int argc, char *argv[])
{
      QApplication a(argc, argv);
      QwtPlot *myPlot = new QwtPlot;
      myPlot->show();
    return a.exec();
}

ja tässä vielä pro-tiedosto

Koodia: [Valitse]
######################################################################
# Automatically generated by qmake (3.0) ma maaliskuuta 23 13:10:22 2015
######################################################################

TEMPLATE = app
TARGET = qwtkoe01
INCLUDEPATH += .

# Input
SOURCES += qwtkoe01.cpp

QT += widgets


# nämä rivit on lisättävä käsin, ainakin ennen toimi näillä
CONFIG += qwt
INCLUDEPATH += /usr/include/qwt
LIBS += -lqwt
 

Virheinä tulee ohjelmaa ajettaessa nyt virheellien osoite
Koodia: [Valitse]
mini@mini:~/qt/harjoittelu2/qwtkoe01$ make
g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I. -I. -I/usr/include/qwt -I/usr/include/qt5 -I/usr/include/qt5/QtWidgets -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtCore -I. -o qwtkoe01.o qwtkoe01.cpp
g++ -m64 -Wl,-O1 -o qwtkoe01 qwtkoe01.o   -L/usr/X11R6/lib64 -lqwt -lQt5Widgets -L/usr/lib/x86_64-linux-gnu -lQt5Gui -lQt5Core -lGL -lpthread

mini@mini:~/qt/harjoittelu2/qwtkoe01$ ./qwtkoe01
*** Error in `./qwtkoe01': realloc(): invalid pointer: 0x00007ff0cf3c1840 ***
Keskeytetty (luotiin core-tiedosto)
 

Sellainen ero 12.04 - ja 14.04 - koneiden välillä ainakin on, että QT += widgets ei tunnistu 12.04 - koneessa, mutta siinä ohjelmat kääntyvät ja toimivat, kun widgetsin kommentoi pois. Käännetty ohjelma toimi sitten 14.04 - koneessakin.

Kyse on luultavastikin versioeroista, vaikka olin asentavinani kumpaankin koneeseen qwt:n ja qt:n samoilla komennoilla, mutta 12.04 - koneeseen siis viime keväänä, muistaakseni.

Nytkin yritin qt:n, qwt:n ja g++:n asentamista niin, että poistin kaikki löytämäni qt- tai qwt- aiheiset tiedostot koneelta ennen uutta asennusta päätteestä. Toivottavasti mitään vanhaa ei jäänyt sotkemaan, mutta sen olisi varmaan apt-get osannut kirjoittaa päälle.

Jos jollain kokeiluohjelmani toimii 14.04 versiossa, voin taas yrittää vaikka poistaa kaikki qt- ja qwt-aiheiset tiedostot ja yrittää asennusta apt-getillä vielä uudestaan.
Otsikko: Vs: Qt (4 tai 5) ja Qwt6 toimimaan Ubuntu 14.04:ssä
Kirjoitti: nm - 26.03.15 - klo:19.17
mini@mini:~/qt/harjoittelu2/qwtkoe01$ make
g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I. -I. -I/usr/include/qwt -I/usr/include/qt5 -I/usr/include/qt5/QtWidgets -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtCore -I. -o qwtkoe01.o qwtkoe01.cpp
g++ -m64 -Wl,-O1 -o qwtkoe01 qwtkoe01.o   -L/usr/X11R6/lib64 -lqwt -lQt5Widgets -L/usr/lib/x86_64-linux-gnu -lQt5Gui -lQt5Core -lGL -lpthread

Sinulla on asennettuna Qt 5 -kehitysympäristö ja käytät sen qmakea. Qwt toimii vain Qt 4:n kanssa. Asenna Qt 4 -kehitysympäristö (ellei ole jo asennettuna) ja aja qmake näin:

Koodia: [Valitse]
qmake -qt4
Voit myös poistaa Qt 5:n dev-paketit, jos et niitä tarvitse. Silloin komento qmake ajaa suoraan Qt 4:n qmaken, eikä lisäparametria tarvita.

(Käytännössä /usr/bin/qmake on symbolinen linkki qtchooser-ohjelmaan, jonka avulla voi valita, minkä Qt-version työkaluja käytetään. qmake -qt4 vastaa komentoa qtchooser -run-tool=qmake -qt=4)


Kannattaa myös lisätä pro-tiedostoon tarkistus ja virheilmoitus:

Koodia: [Valitse]
greaterThan(QT_MAJOR_VERSION, 4): error("Requires Qt 4. On Ubuntu, run qmake with parameter -qt4")
Otsikko: Vs: [ratkaistu] Qt (4 tai 5) ja Qwt6 toimimaan Ubuntu 14.04:ssä
Kirjoitti: teele - 05.04.15 - klo:14.33

Ratkaisu näyttää olevan


Koodia: [Valitse]
qmake -qt4
joka tekee 4-versiolle sopivan makefilen.

Kiitos neuvosta  :)