Newsgroup: it.comp.os.unix
Titolo: Problema compilazione esempi Redbook OpenGL

Ho un piccolo problema nella compilazione di sorgenti c che fanno uso
dell'OpenGL Utility Toolkit.
Ultimamente ho installato glut versione 3.7 per Solaris8 (sparc) e come
tutti i programmi supplementari
mi ritrovo le librerie glut nella directory /usr/local/glut-3.7 assieme
ai Makefile e a molti programmi
di esempio. Nella sottodirectory include trovo le dir glut (contenente
glut.h e altri 5 header file)
e mui(contenente altri header file).
Quando compilo un programma che include i seguenti header:
#include <GL/gl.h>
#include <GL/glut.h>
Compilando con
cc -o example1-1 example1-1.c -lGL
-lGL e' un parametro necessario perche' vengano incluse le librerie in
/usr/openwin/share/include/GL
Premetto che ho spostato quanto contenuto in
/usr/local/glut-3.7/include/GL nella directory precedente.
Cosi' facendo dovrebbe rilevare il file glut.h che in effetti viene
trovato, ma nonostante cio' non riesco a compilare e 
vengono segnalati i seguenti errori:
/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/crt1.o: In function
`_start':
/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/crt1.o(.text+0x5c):
undefined reference to `main'
/var/tmp/ccHCdNNW.o: In function `ain':
/var/tmp/ccHCdNNW.o(.text+0x274): undefined reference to `glutInit'
/var/tmp/ccHCdNNW.o(.text+0x280): undefined reference to
`glutInitDisplayMode'
/var/tmp/ccHCdNNW.o(.text+0x290): undefined reference to
`glutInitWindowsSize'
/var/tmp/ccHCdNNW.o(.text+0x2a0): undefined reference to
`glutInitWindowPosition'
/var/tmp/ccHCdNNW.o(.text+0x2b0): undefined reference to
`glutCreateWindow'
/var/tmp/ccHCdNNW.o(.text+0x2c8): undefined reference to
`glutDisplayFunc'
/var/tmp/ccHCdNNW.o(.text+0x2d0): undefined reference to `glutMainLoop'
collect2: ld returned 1 exit status
Ossia sembra che non rilevi le funzioni facenti parte della libreria
glut.h
Un problema analogo mi era gia' capitato cercando di compilare sofware
che faceva uso delle glut e
che ricercava il supporto da parte del gcc di un parametro del tipo
-lglut (mentre -lGL veniva trovato).
Ho provato includendo anche questo parametro in compilazione ma niente
da fare.
Come posso fare in modo che l'ld riconosca le funzioni di glut.h?
Grazie mille.

 Grazie mille.
Cerca inizialmente dove e' stata messa la libreria (libglut.a/libglut.so).
Si trova probabilmente in /usr/local/glut-3.7/lib, oppure in /usr/local/lib.
In entrambi i casi tale posizione non e' fra le dir utilizzate normalmente dal
sistema. Devi quindi dirlo al sistema e/o al compiler/linker:
Per in compilatore/linker basta l'opzione -L
cc -o example1-1 example1-1.c -lGL -L/usr/local/glut-3.7/lib -lglut
Per quanto riguarda gli includes stesso discorso:
se i files non sono nei posti standard devi dirglielo:
cc -o example1-1 example1-1.c -I/usr/local/glut-3.7/includes \\
-L/usr/local/glut-3.7/lib -lglut -lGL
Ad alcuni sistemi occorre poi un file con la lista delle dir che contengono
librerie da utilizzare per l'esecuzione degli applicativi:
Se sulla tua versione serve, man ldconfig dovrebbe darti le giuste indicazioni.
(/etc/ld.so.conf ?)
Una approfondita lettura di almeno le man pages di cc e ld dovrebbe far
intravedere la luce alla fine del tunnel. 
-- 
 Alberto 'JCN-9000' Varesio     AKA  BlueRider    AIX V4.3 System Support
 EADS-MDTV - Via Goito 51/A    Riding the world   Phone: 
+39-011-415-8111
 10195 Grugliasco (TO) ITALY   on a Honda CB500    Cell: 
+39-349-492-4769
 mailto:
A-Va...@torino.matra-dtv.fr
           mailto:
A-Va...@edist.it
--
 If you're passed on the right, you're in the wrong lane.

 Quando compilo un programma che include i seguenti header:
CUT
Quale compilatore usi?
Se stai utilizzando gcc e quel cc che ho visto é solo un link allora
verifica se hai installate le binutils della GNU (as, make ecc scaricabili
da Sunfreeware), dopodichè riprova a compilare.
Ciao
Caius

 Caius
Uso gcc, cc e' solo un link; le binutils le ho scaricate ma nella
variabile $PATH devo mettere prima la dir /usr/local/bin...provo

 
intendi il file /var/ld/ld.config...si, non e' un problema, infatti
avevo gia' incluso /usr/local/glut/glut-3.7/lib/glut seguendo il
consiglio di qualche manuale, ma niente da fare.
In quella dir ci sono molti file C con un Imakefile.
Penso proprio che scarichero' la versione di glut presente sul sito sun,
che tra l'altro non include gli esempi.
Ora provo ad approfondire la cosa poi mi rifaccio (sicuramente) sentire.
Ciao a tutti

Sono riuscito finalmente a compilare le glut; ho dovuto rimuovere i
parametri -Xc -xF -xcg92 dai Makefile di tutte le sottodirectory.
Infatti i Makefile erano predisposti per il compilatore Forte di Sun che
ovviamente io non ho.
Ora mi ritrovo nella sottodir include/ due dir ossia GL e mui. Ho
pensato che chiamandosi GL la prima, in modo da non indicare ogni volta
al compilatore dove si trovano gli header file delle glut, fosse buona
cosa copiarne il contenuto in /usr/openwin/share/include/GL per la
seconda ho semplicemente copiato la dir in
/usr/openwin/share/include/mui.
Con crle ho impostato i Default Library Search Path di ld in modo che
ricerchino le librerie anche in /usr/local/glut-3.7/lib/glut ma anche
nelle sottodir /usr/local/glut.../lib/mui glse e glmap...quelle agibili
a sistemi SunOs che sono state compilate appunto. Mi chiedevo se anche
usando l'ld contenuto nelle binutils esso fa cmq uso del file
/var/ld/ld.config come l'ld fornito con il sistema.
Provo allora con gcc -o example1-1 example1-1.c -I
/usr/local/glut-3.7/include/glut -L /usr/local/glut-3.7/lib/glut -lglut
-lGL 
e ottengo
/var/tmp/ccGKozBI.o: In function `main':
/var/tmp/ccGKozBI.o(.text+0x290): undefined reference to
`glutInitWindowsSize'
/usr/local/glut-3.7/lib/glut/libglut.a(glut_util.o): In function
`glutReportErrors':
glut_util.o(.text+0xe0): undefined reference to `gluErrorString'
collect2: ld returned 1 exit status
La cosa strana e' che questi sembrano errori nel codice...Io da umile
studente non ci capisco nulla...cmq
Premetto che pur avendo impostato l'ld a cercare le librerie nell
sottodir glut../lib
non hgo ancora riavviato il sistema, quindi suppongo che al prossimo
reboot non debba piu' inserire  -I e -L per ora se compilo senza
inserirli non riconosce -lglut...ora cmq provo.
Il mio problema e' che gli errori che mi ha passato non so da cosa
dipendano.

 collect2: ld returned 1 exit status
Mi correggo, scusate, ma c'era un errore nella sintassi (la funzione e'
glutInitWindowSize).Cmq
gli errori nella ReportErrors permangono. La cosa strana e' che pur
avendo aggiunto con crle tutti i percorsi di ricerca delle librerie,
usando cc devo cmq puntare a tali librerie per usarle e nonostante cio'
permane quell'errore nella libglut.a.
Altro fatto strano e' che ho notato che anche l'ld fornito con il
sistema (che utilizzo anticipando /usr/ccs/bin a /usr/local/bin in
$PATH) si appoggia a un ld contenuto in
/usr/local/sparc-solaris8/bin...non e' che l'installazione delle
binutils di gnu mi ha modificato anche l'ld del sistema? Dove diavolo
imposto l'ld di gnu per estendere il percorso di ricerca librerie, visto
che impostando con crle non va?
Grazie anticipatamente e scusatemi per il numero eccessivo dei post...