# use gtk e gcj in gcc, servono? A cosa?

## dorian-gray84

Causa aggiornamento gcc alla version 4.1 mi sono messo a riguardare tutte le use flag che ho settato nei miei pacchetti in modo da poter scremare quelle che mi sembrano piu' inutili ora che sono un utente un attimino piu' smaliziato.

Mi rimangono criptiche le use  flag gtk e gcj nel pacchetto gcc stesso.

O meglio ho un'idea di a cosa possano servire ma volevo una conferma.

Gtk se settata dovrebbe installarmi la libreria gtk di modo che io possa inserire 

```
#include <gtk/gtk.h>
```

 nei miei programmi C.

Infatti credo che per altri linguaggi (ad esempio python) bisgna installare un pacchetto separato per avere queta libreria (ad esempio Pygtk).

Gtk dovrebbe essere una libreria simile a xlibs ma piu' orientata alla creazione di interfaccie grafiche (finestre, bottoni, menu, ecc...) di quanto non faccia quest'ultima.

Quindi se io non ho bisogno di creare interfaccie grafiche questa use flag non mi serve, giusto?

Gcj invece e' un compilatore java che e' in grado di produrre sia bytecode (da dare in pasto alla java virtual machine che o interpretera'), sia codice macchina e quindi direttamente eseguibile.

Volevo sapere che differenza c'e' tra questo compilatore e quello fornito da java stesso (il comando javac per intenderci), se ci sono vantaggi ad usarlo ed eventuali problemi di compatibilita'.

Io java lo uso raramente e principalmente per qualche progetto universitario tramite eclipse (non sono un grosso fan di quel linguaggio... C rulez!), qundi non so, mi conviene usare questo gcj invece del classico compilatore java? E' compatibile con eclipse?

----------

## .:chrome:.

gtk non serve certo per compilare programmi GTK. nel senso... figurati se per compilare programmi GTK servisse quella roba.

dai un'occhiata all'ebuild per renderti conto di quello che fa

GCJ è invece un compilatore java

in questo caso dire che la regola è "se non sai cosa è, non ti serve"

----------

## randomaze

 *dorian-gray84 wrote:*   

> Volevo sapere che differenza c'e' tra questo compilatore e quello fornito da java stesso (il comando javac per intenderci), se ci sono vantaggi ad usarlo ed eventuali problemi di compatibilita'.
> 
> Io java lo uso raramente e principalmente per qualche progetto universitario tramite eclipse (non sono un grosso fan di quel linguaggio... C rulez!), qundi non so, mi conviene usare questo gcj invece del classico compilatore java? E' compatibile con eclipse?

 

gcj dovrebbe compilare codice java e generare un eseguibile ELF standard che non necessita della JVM.

Quanto sia efficace e funzionale non lo so.

la use gtk presumo serva per una qualche interfaccia, ma come ha detto k.gothmog meglio guardare nell'ebuild.

----------

## dorian-gray84

Ho guardato l'ebuild. sembra che la flag gtk installi alcune librerie grafiche...

Potresti essere  piu' chiaro riguardo all'utilita' di gtk in gcc?

"Se non ti serve non usarla" non mi sembra adatto in questo caso. Io so di avere bisogno di un compilatore per java, vorrei sapere se mi conviene usare gcj o il compilatore classico

----------

## Ic3M4n

da quel che ho visto con un equery files le librerie gtk che aggiunge sono parte di gcj, o comunque sono librerie java.

o forse ne ho persa qualcuna?

----------

## dorian-gray84

Qundi vuoi dire che aggiunge il supporto gtk al compilatore java e non al compilatore C?

----------

## .:chrome:.

la flag gtk aggiunge, come in OGNI pacchetto il supporto alle librerie GTK. ma non il supporto alla compilazione. quello non c'entra

quindi installa un ambiente grafico GTK. personalmente è roba che onn attiverei mai su un compilatore

l'importazione di default è disattivata. non vedo perché porsi il problema

GCJ è un compilatore java scritto per fare fronte al problema che i JDK non sono GPL né open-source. non vorrei dire una vaccata, ma mi sembra che alla fine produca addirittura un eseguibile, invece che un bytecode.

in ogni caso è ottenuto per reverse engineering, e si sa come vanno queste cose.

certe volte funziona davvero male. basta cercare un po' in giro per rendersi conto dei problemi che ha

----------

## dorian-gray84

Cioe', fammi capire bene, installa un supporto grafico al compilatore? Ma che me ne faccio? L'utilita' dove sta?

Si hai ragione, mette un po' i brividi. Se mi capita una macchina di test pero' provo a vedere cosa succede con quella flag...

Si', il gcj puo' produrre oltre che a bytecode anche direttamente gli eseguibili, infatti era questa feature che mi intrigava un po'... cmq da quel che ho capito e' meglio lasciar stare.

Riguardo al fatto che gtk e' impostata disattivata come default lo sapevo, ma mi piace capire le cose con cui ho a che fare.

E poi, anche windows era impostato come default nel mio computer, non sempre una cosa perche' e' di default e' la migliore, no??

Cmq grazie 1000 a tutti, anche per la velocita' nel rispondere

----------

## .:chrome:.

[quote="dorian-gray84"]Cioe', fammi capire bene, installa un supporto grafico al compilatore?

no. installa le librerie grafiche

cosa vuol dire "supporto grafico al compilatore"?

 *dorian-gray84 wrote:*   

> Si', il gcj puo' produrre oltre che a bytecode anche direttamente gli eseguibili, infatti era questa feature che mi intrigava un po'... cmq da quel che ho capito e' meglio lasciar stare.

 

con Fedora c'è una versione di eclipse compilata con GCJ. non è del tutto inaffidabile, ma insomma... le specifiche di java non parlano di eseguibili. già quello mi pare una gran porcata

inoltre *può accadere* che il codice compilato non faccia esattamente quelloc he dovrebbe. questo è un dato di fatto

----------

## dorian-gray84

MMhhh...alora non ho capito bene.

Cosa intendi con installa le librerie? Il fatto che io posso usare funzioni gtk?

----------

## richard77

 *dorian-gray84 wrote:*   

> MMhhh...alora non ho capito bene.
> 
> Cosa intendi con installa le librerie? Il fatto che io posso usare funzioni gtk?

 

https://forums.gentoo.org/viewtopic-t-495892-highlight-gtk+gcc.html

Per i non anglofoni:

Con la use gtk i programmi compilati con gcj usano le gtk come gui. 

(chi ha risposto nel thread non ne è sicuro: "Presumably" -> Presumibilmente)

----------

## bandreabis

 *dorian-gray84 wrote:*   

> E poi, anche windows era impostato come default nel mio computer, non sempre una cosa perche' e' di default e' la migliore, no??

 

Non credo che come paragone sia azzeccato, non credi?  :Razz: 

----------

## dorian-gray84

Boh, era la prima cosa che mi era venuta in mente, e poi era un paragone adatto in ambito informatico...

E' che odio la parola "default" e il suo significato.

E' come la bellezza, una cosa tutta soggettiva.

Ma qui stiamo andando sul filosofico e non mi sembra l'ora adatta... Notte!

----------

## darkmanPPT

ma quindi, se ho ben capito....

L'UNICO MODO per compilare un file java (.java) in un eseguibile sarebbe quello di attivare la flag gcj?

cioè, non ci sono altri modi per compilare i .java in codice eseguibile (normalissimo binario)?

questo lo chiedo perchè mi chiedevo se fosse possibile in qualche modo utilizzare java come il C (performante).... solo con la facilità di scrittura di codice java.

 :Wink: 

con questo niente di male sul C++ o sul C............

però.... scrivere programmi in java e decisamente più semplice  :Wink: 

(ok.... punti di vista)

-----------------------

ho visto che nel java-sdk esiste anche un javah... che genera file C.

cosa ne pensate?

----------

## djinnZ

C'è un overlay specifico per il progetto di eliminare le jvm ed usare solo compilati. Non so quanto va avanti ma c'è.

Usare le gtk ti porta incompatibilità ma rende il codice più veloce, usare gtk senza gcj è quasi inutile (ma ti crea un entusiasmante circular dep se installi da stage3, e se hai anche doc attiva diventi vecchio prima di scovarlo). Alcuni pacchetti (per esempio i pdftools) scrittin in java se gcj è presente vengono compilati con questa e sono decisamente più veloci (chissà che non mi decida a farlo col dannato azureus), avere gcj attiva se usi flag di ottimizzazione "pesanti" ti può esporre al rischio di non riuscire a compilare gcc (ed in tal caso ti basta usare ottimizzazioni più umane o disalbilitare le use incriminate)

----------

## darkmanPPT

 *djinnZ wrote:*   

> C'è un overlay specifico per il progetto di eliminare le jvm ed usare solo compilati. Non so quanto va avanti ma c'è.
> 
> Usare le gtk ti porta incompatibilità ma rende il codice più veloce, usare gtk senza gcj è quasi inutile (ma ti crea un entusiasmante circular dep se installi da stage3, e se hai anche doc attiva diventi vecchio prima di scovarlo). Alcuni pacchetti (per esempio i pdftools) scrittin in java se gcj è presente vengono compilati con questa e sono decisamente più veloci (chissà che non mi decida a farlo col dannato azureus), avere gcj attiva se usi flag di ottimizzazione "pesanti" ti può esporre al rischio di non riuscire a compilare gcc (ed in tal caso ti basta usare ottimizzazioni più umane o disalbilitare le use incriminate)

 

si... infatti il gcc 4.1.1-r3 nn riesco a ricompilarlo.

però devo ammettere che con il 3.4.6-r2 compilo e abilito la flag gcj... e in effetti funziona!  :Wink: 

il problema è che nn capisco come mai il gcc 4-1-1r3 nn compili. boh... ad un certo punto esce con "errore".

stop. ma non è che tipo manchino file, path, librerie, etc etc... boh... esce dopo aver compilato un file senza un errore. dice solo "errore"....

mah....

io ho l'impressione che sia mancanza di spazio libero (difatti si blocca quando mancano 30 mb alla fine dalla memoria ram... ah, si... compilo in ram, ovviamente  :Wink:  )

----------

## riverdragon

Se termina per l'esaurimento della ram allocata per /var/tmp/portage puoi leggere, una decina di righe sopra alla segnalazione, "No space left on device". Gcc ha bisogno, se non sbaglio, di quasi un GB di spazio per i file temporanei che crea, prova a smontare la partizione tmpfs in cui compili e riprova.

----------

## djinnZ

qualcosina in più con gcj e gtk attive e la compilazione in se stessa richiede più memoria rispetto al gcc statndard. Devi per forza compilare su disco se non hai almeno 3 GB di ram effettiva.

E comunque se usi l'hardening ti consiglio vivamente di fare un pacchetto binario del gcc _senza gcj_ da tenere di scorta. Non so se hanno risolto ma c'è il rischio che ti ritrovi un gcc danneggiato che non riesce più a ricompilare se stesso.

----------

## darkmanPPT

uhm... che sfiga...

premetto che senza la flag gcj si compila in meno di 850 MB di ram

ma domanda:

```

[I] sys-devel/gcc

     Available versions:

...

        (3.4)   ~3.4.1-r3 3.4.4-r1 3.4.5 3.4.5-r1 ~3.4.6 3.4.6-r1 3.4.6-r2

        (4.0)   ~*4.0.3 ~*4.0.4

        (4.1)   ~4.1.0-r1 4.1.1 4.1.1-r1 4.1.1-r3 ~4.1.2

     Installed versions:  3.4.6-r2(3.4)(16:32:40 05/07/07)(-altivec -bootstrap -boundschecking -build -d -doc fortran gcj gtk -hardened -ip28 -ip32r10k -multilib -multislot -n32 -n64 nls -nocxx -nopie -nossp -objc -test -vanilla)

                          4.1.1-r3(4.1)(22:11:48 01/19/07)(-altivec -bootstrap -build -doc fortran -gcj gtk -hardened -ip28 -ip32r10k -mudflap -multilib -multislot -n32 -n64 nls -nocxx -objc objc++ objc-gc -test -vanilla)

```

ho un po' di flag attivate...   :Wink: 

però il gcc 3.4.6 (che nn so ancora se mi serve ancora o meno) si compila in meno di 800mb.

io ho 1GB di ram. ho 1.7GB di swap (sono stato un po' largo  :Very Happy: .

3GB dici?  :Shocked: 

è possibile montare come tmpfs più spazio di quanto se ne abbia? cioè, tipo da utilizzare anche la swap?

probabilmente sto sparando minchiate.... però era per chiedere.

ps: già che ci sono vi chiedo.....

ma c'è un how to che spieghi tutte le flag di gcc? perchè poi mi si attiva la flag fortran? (ma chi lo vuole il fortran!   :Wink:  )

----------

## Ic3M4n

tmpfs va in ram + swap

ramfs solo in ram.

----------

## darkmanPPT

 *Ic3M4n wrote:*   

> tmpfs va in ram + swap
> 
> ramfs solo in ram.

 

grazie

infatti uso tmpfs

per chi interessa....

per compilare gcc 4.1.1 con gjc attiva e fortran (ma a che mi serve????) disattivato. sono sufficienti 1.1 GB per compilare

----------

## djinnZ

 *darkmanPPT wrote:*   

> e fortran (ma a che mi serve????)

 

[OT] ad usare un ottimo ed apprezzatissimo (da matematici e fisici, ed è tutto dire) linguaggio di programmazione dalla lunga ed interminabile storia.

nonchè il più odiato dopo il cobol nella storia dellìimformatica[/OT]

scusa mi ero scordato che i miei valori erano con use "doc".

----------

## darkmanPPT

 *djinnZ wrote:*   

>  *darkmanPPT wrote:*   e fortran (ma a che mi serve????) 
> 
> [OT] ad usare un ottimo ed apprezzatissimo (da matematici e fisici, ed è tutto dire) linguaggio di programmazione dalla lunga ed interminabile storia.
> 
> nonchè il più odiato dopo il cobol nella storia dellìimformatica[/OT]
> ...

 

apprezzato quanto vuoi.... ma è assolutamente stupido come linguaggio!  :Rolling Eyes: 

cmq vedo che tanti (tra matematici e fisici) si stanno "convertendo" al C. sarebbe anche ora visto che il C esiste da un bel po'!

 :Rolling Eyes: 

mah.... io ho una certa repulsione per il fortran.

tornando a noi.... al GCJ...

allora, io l'ho installato... PERO'... c'è un però....

ho installato tutto senza problemama. se faccio:

```
revdep-rebuild -p

Configuring search environment for revdep-rebuild

Checking reverse dependencies...

Packages containing binaries and libraries broken by a package update

will be emerged.

Collecting system binaries and libraries... done.

  (/root/.revdep-rebuild.1_files)

Collecting complete LD_LIBRARY_PATH... done.

  (/root/.revdep-rebuild.2_ldpath)

Checking dynamic linking consistency...

  broken /usr/lib/gcc/i686-pc-linux-gnu/3.4.6/lib-org-w3c-dom.la (requires /usr/lib/libgcj.la)

  broken /usr/lib/gcc/i686-pc-linux-gnu/3.4.6/lib-org-xml-sax.la (requires /usr/lib/libgcj.la)

  broken /usr/lib/gcc/i686-pc-linux-gnu/4.1.1/libgcjawt.la (requires /usr/lib/lib-gnu-java-awt-peer-gtk.la)

  broken /usr/lib/gcc/i686-pc-linux-gnu/4.1.1/libgij.la (requires /usr/lib/libgcj.la)

 done.

  (/root/.revdep-rebuild.3_rebuild)

Assigning files to ebuilds... done.

  (/root/.revdep-rebuild.4_ebuilds)

Evaluating package order... done.

  (/root/.revdep-rebuild.5_order)

All prepared. Starting rebuild...

emerge --oneshot -p =sys-devel/gcc-4.1.1-r3 =sys-devel/gcc-3.4.6-r2

These are the packages that would be merged, in order:

Calculating dependencies... done!

[ebuild   R   ] sys-devel/gcc-4.1.1-r3

[ebuild   R   ] sys-devel/gcc-3.4.6-r2

Now you can remove -p (or --pretend) from arguments and re-run revdep-rebuild.

```

e se ri-emergo rimane tutto uguale. che scatole......  :Sad: 

----------

## djinnZ

fix_libtool.sh tanto per sicurezza poi crea un link simbolico alla libgcj.la del compilatore che usi. Avevo aperto un bug a tal proposito ma non mi pare che abbia avuto tanto seguito. In teoria eselect/gcc-config dovrebbero gestire il link ma non lo fanno od in alternativa dovrebbe puntare direttamente a /usr/lib/gcc/<versione>/libgcj.la.

Visto che è molto particolare il compilatore java non è nato per essere "slottato".

[OT]Il fortran non è un linguaggio stupido è solo un fossile vivente.

Considera che quando è nato già avere una telescrivente (strano apparato dove invece dello schermo c'èra una lunga striscia di carta) era un lusso esagerato

Ora è l'idiozia intrinseca alla specie subumana che lo usa e lo impone a farlo sopravvivere (solita sparata razzista che sottolineo come sarcastica, a scanso di equivoci) come anche il cobol (solo che li è anche per continuare a giustificare la presenza di tanti esseri inutili e per strafottenza verso l'utenza).

Per il fortran ricordo quell'emerito imbecille di professore che lo decantava solo perchè c'èra una enorme libreria di codice già pronto (tanto faceva sempre e solo le stesse idiozie con un intero vax a disposizione) per il cobol... mi auto-censuro, mi viene solo da smoccolare e non voglio incorrere nelle ire dei mods.

[/OT]

----------

## Onip

E' un vecchissimo bug. A leggere i commenti trovi anche un paio di workaround.

----------

