craft ha scritto:
Un sistema compilato (correttamente) è più rapido e meglio funzionante di un sistema installato precompilato (quindi se le qt che hai compilato funzionano tieniti quelle)
Per questo molti dicono che gentoo o simili sono "migliori" di ubuntu/fedora/suse? che sono precompilati?vero? ???
(ot)Ma ora gentoo non attraversa un momento di crisi?
Crisi? Non ne so niente. Io la usicchio e non è male. Poi... Gentoo è Gentoo, il portage, la configurazione, il fascino... Il fatto che sia un sistema che ti compili tu ti porta sì ad avere un software perfettamente adattato al tuo hardware, personalizzato eccetera, ma al giorno d'oggi, con i processori che ci sono la differenza non è così marcata. (ot)
craft ha scritto:
comunque tornando a noi ora funziona ma al make mi restituisce il seguente errore:
luigi@luigi-desktop:~/Documenti/Programmazione Qt$ make
/usr/local/Trolltech/Qt-4.4.1/bin/uic untitled.ui -o ui_untitled.h
g++ -Wl,-rpath,/usr/local/Trolltech/Qt-4.4.1/lib -o Programmazione\ Qt -L/usr/local/Trolltech/Qt-4.4.1/lib -lQtGui -L/usr/local/Trolltech/Qt-4.4.1/lib -L/usr/X11R6/lib -pthread -lpng -lSM -lICE -pthread -pthread -lXi -lXrender -lXrandr -lfreetype -lfontconfig -lXext -lX11 -lQtCore -lz -lm -pthread -lgthread-2.0 -lrt -lglib-2.0 -ldl -lpthread
/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [Programmazione Qt] Error 1
che sinceramente credo che sia dovuto ad una cattiva programmazione, me lo confermi?
Manca solo una cosa: il main. Quando fai un progetto c++, ti conviene fare così: ci dev'essere un file chiamato
main.cpp che contiene la funzione
main(). Il file può essere così:
Codice: Seleziona tutto
#include <iostream>
#incliude <QtGui>
#include "MyPushButton.hpp"
using namespace std;
int main(int argc, char** argv)
{
QApplication app(argc, argv);
MyPushButton* button = new MyPushButton();
button->show();
return app.exc();
}
E poi per ogni classe fatta da te (nell'esempio: MyPushButton) ci dev'essere un file "header" con nome uguale al nome della classe ed estensione
.hpp e un file con nome uguale e estensione
.cpp. Nell'header metti la definizione della classe (qui l'esempio del MyPushButton) con i prototipi dei metodi:
Codice: Seleziona tutto
#include <QtGui>
class MyPushButton : public QPushButton
{
public:
MyPushButton();
};
Nell'altro file scrivi le definizioni dei metodi (stesso esempio, file
MyPushButton.cpp):
Codice: Seleziona tutto
#include "MyPushButton.hpp"
MyPushButton::MyPushButton()
: QPushButton(tr("Ciao, mondo!"))
{}
Come vedi la classe MyPushButton non è altro che un QPushButton, solo che il costruttore richiama il costruttore di QPushButton dandogli il parametro
tr("Ciao, mondo!")) in modo che tutti i MyPushButton hanno la scritta "Ciao, mondo!".
Il file header dev'essere #incluso sia dal file .cpp della classe, in modo che la classe sia definita quando si definiscono i metodi, sia dai file in cui viene usata la classe (qui per esempio nel main, ma può essere usata anche da altri file, per esempio in MyMainWindow in cui il widget centrale è un MyPushButton). Invece il file .cpp non viene mai incluso altrove e viene compilato da solo. La compilazione di MyPushButton.cpp genera un file oggetto (MyPushButton.o), così come per tutte le altre classi e per il main. Poi questi file oggetto vengono uniti. Ma della compilazione si occupa qmake. Tu devi solo far sì che lui si trovi un progetto ben strutturato, con il main.cpp, le varie classi con header e file cpp e le inclusioni corrette.
Quando dai un
qmake -project lui legge il progetto, controlla i file che ci sono e prepara la compilazione. Poi il comando
qmake legge il file di progetto, legge i vari file e scrive un Makefile che sappia dove trovare tutto ciò che gli serve eccetera. Con
make semplicemente compili.
Beh, mi sono fatto capire? La sostanza è che ti serve un main.
Semmai crea una cartella Prova, mettici dentro i file dell'esempio che ti ho fornito e prova a compilare.
craft ha scritto:
symlink
? Come si fa? :-[
Il symlink si ottiene con il comando
ln -s file link e ti permette di creare un link chiamato
link al file
file. Sono validi sia percorsi assoluti che relativi, ma ovviamente per indicare correttamente il file da linkare è meglio usare sempre percorsi assoluti.
Ma piuttosto che creare questi link è meglio lavorare sul PATH. Apri un terminale e digita il comando
echo $PATH: vedrai una serie di percorsi separati da "
:". Queste sono le directory in cui il sistema cerca i file eseguibili, in modo che quando tu digiti
aptitude lui traduce in
/usr/bin/aptitude. È sufficiente che tu inserisca
/usr/local/Trolltech/Qt-4.4.1/bin nel PATH predefinito per non dover più andare tu a cercare qmake o assistant, ma lo faccia il sistema.
Ora, la definizione del PATH non so più bene dove sia nelle ultime versioni di Ubuntu. Comunque se tu inserisci un file
qt.sh nella directory
/etc/profile.d con questa riga all'interno, dovrebbe andare (ma prima devi anche fare logout/login):
Ok, ora devo scendere in cantina...
P.S.: sì, sono in lizza per il premio "Post più lungo della storia"...
P.P.S.: per i blocchi di codice usa il tag [ code ] invece di usare [ quote ].