Baghira, Xmd, QT: problema di inclusioni e soluzione

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
leso
Linux 0.x
Linux 0.x
Messaggi: 7
Iscritto il: gio 15 mag 2008, 14:39
Slackware: 12.1
Località: Torino
Contatta:

Baghira, Xmd, QT: problema di inclusioni e soluzione

Messaggio da leso »

Buon giorno a tutti,
cercando di compilare Baghira http://www.kde-look.org/content/show.ph ... ntent=8692 su Slackware 12.1 (appena installata) mi sono imbattuto in un errore di inclusione:

Codice: Seleziona tutto

In file included from /usr/include/X11/extensions/XI.h:55,
                 from /usr/include/X11/extensions/XInput.h:56,
                 from /usr/include/X11/extensions/XTest.h:50,
                 from menu.cpp:42:
/usr/include/X11/Xmd.h:137: error: conflicting declaration 'typedef long int INT32'
/usr/lib/qt/include/qglobal.h:710: error: 'INT32' has a previous declaration as 'typedef int INT32'
Il problema non è in Baghira, ma in una doppia dichiarazione tra qglobal di QT e Xmd di X11.
Visto che la cosa mi è sembrata abbastanza grave ecco una mia soluzione: ho aggiunto prima della linea 137 le seguenti modifiche:

Codice: Seleziona tutto

#ifdef LONG64
typedef long INT64;
typedef int INT32;
#else
#ifndef QGLOBAL_H       // Added by Leso
typedef long INT32;
#endif                  // Added by Leso
#endif
typedef short INT16;
#endif
In questo modo, se la #ifdef di qglobal viene soddisfatta, la variabile non viene ridichiarata due volte.

E' troppo grezza come soluzione? :violent1:
Vale la pena di aprire un bug? E, se sì, a chi? X11, QT, Slackware? :dontknow:

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Baghira, Xmd, QT: problema di inclusioni e soluzione

Messaggio da conraid »

leso ha scritto: E, se sì, a chi? X11, QT, Slackware? :dontknow:
Tu cosa hai modificato?

Il problema IMHO sono le QT. Bisogna vedere se viene sempre richiamato quell'header dalle QT però.
Slackware no. Perché io posso installare Slackware senza QT e quindi quella dichiarazione immagino serva.
X11 idem come sopra.
Le QT invece hanno bisogno di X11, ma se quel file non viene sempre richiamato e c'è bisogno di quella variabile allora serve anche alle QT.
Magari spetta al programma verificare.

Avatar utente
leso
Linux 0.x
Linux 0.x
Messaggi: 7
Iscritto il: gio 15 mag 2008, 14:39
Slackware: 12.1
Località: Torino
Contatta:

Re: Baghira, Xmd, QT: problema di inclusioni e soluzione

Messaggio da leso »

Ho modificato: /usr/include/X11/Xmd.h

Il problema credo sia nell'inclusione di entrambi gli header:

Codice: Seleziona tutto

/usr/include/X11/Xmd.h
/usr/lib/qt/include/qglobal.h
Insomma mi suggerisci di aprire il bug a Baghira?

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Baghira, Xmd, QT: problema di inclusioni e soluzione

Messaggio da conraid »

leso ha scritto:Ho modificato: /usr/include/X11/Xmd.h

Il problema credo sia nell'inclusione di entrambi gli header:

Codice: Seleziona tutto

/usr/include/X11/Xmd.h
/usr/lib/qt/include/qglobal.h
Insomma mi suggerisci di aprire il bug a Baghira?
Ma quegli header sono identici? o esportano anche altro?
IMHO sì, segnalano a Baghira, anche se sinceramente vado ad intuito.
Hai provato a vedere altri software che soluzione adottano?

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Baghira, Xmd, QT: problema di inclusioni e soluzione

Messaggio da conraid »

Ho dato un occhiata veloce e da ignorante, ma quella dichiarazione in qglobal si ha per compatibilità con qt1

Codice: Seleziona tutto

 #if !defined(QT_CLEAN_NAMESPACE)
// source compatibility with Qt 1.x
typedef signed char             INT8;           // 8 bit signed
typedef unsigned char           UINT8;          // 8 bit unsigned
typedef short                   INT16;          // 16 bit signed
typedef unsigned short          UINT16;         // 16 bit unsigned
typedef int                     INT32;          // 32 bit signed
typedef unsigned int            UINT32;         // 32 bit unsigned
#endif

Avatar utente
leso
Linux 0.x
Linux 0.x
Messaggi: 7
Iscritto il: gio 15 mag 2008, 14:39
Slackware: 12.1
Località: Torino
Contatta:

Re: Baghira, Xmd, QT: problema di inclusioni e soluzione

Messaggio da leso »

Allora, in /usr/include/X11/Xmd.h ho trovato alla riga 133:

Codice: Seleziona tutto

#ifdef LONG64
typedef long INT64;
typedef int INT32;
#else
typedef long INT32;
#endif
Mentre in /usr/lib/qt/include/qglobal.h all'inizio del file (riga 41) c'è un controllo:

Codice: Seleziona tutto

#ifndef QGLOBAL_H
#define QGLOBAL_H
Alla riga 703 dello stesso file si trova:

Codice: Seleziona tutto

#if !defined(QT_CLEAN_NAMESPACE)
// source compatibility with Qt 1.x
typedef signed char             INT8;           // 8 bit signed
typedef unsigned char           UINT8;          // 8 bit unsigned
typedef short                   INT16;          // 16 bit signed
typedef unsigned short          UINT16;         // 16 bit unsigned
typedef int                     INT32;          // 32 bit signed
typedef unsigned int            UINT32;         // 32 bit unsigned
#endif
In particolare il problema sta nella riga 709:

Codice: Seleziona tutto

typedef int                     INT32;          // 32 bit signed
Come hai detto tu, è una sezione di compatibilità con QT1. Quindi da qualche parte, probabilmente in Baghira, si richiamano le librerie di QT1 e al contempo INT32 dichiarato a long. Insomma, un pasticcio da sviluppatori... :(

Segnalerò a Baghira.... :-k

Rispondi