Newsgroup: it.comp.os.linux.development
Titolo: linking

Salve,
ho un problema che mi attanaglia, ma non riesco proprio a risolverlo:
il programma in questione č composto da questi files,
main.c // parte centrale del programma
main.h // header a cui si riferiscono tutte le estensioni del programma
callback.c
callback.h
interface.c
interface.h
image.c
image.h
gli unici #include presenti nel programma sono quelli dei file .c main.c
callback.c interface.c e image.c, che includono (#include) il file main.h,
che allego qua:
-----------------------------------------
#include <gtk-2.0/gtk/gtk.h>
#include <stdio.h>
#include "callback.h"
#include "interface.h"
#include "image.h"
-----------------------------------------
A questo punto lancio questo makefile:
---------------------------------------------------------
CC = gcc `pkg-config --cflags --libs gtk+-2.0`
all: main.o image.o interface.o callback.o
 $(CC) -o main main.o image.o interface.o callback.o
image.o: image.c main.h
  $(CC) -c image.c
interface.o: interface.c main.h
      $(CC) -c interface.c
callback.o: callback.c main.h
     $(CC) -c callback.c
main.o: main.c main.h
 $(CC) -c main.
--------------------------------------------------------
tutto bene, tranne che l'output di gcc č:
---------------------------------------------------------------------
gcc `pkg-config --cflags --libs gtk+-2.0` -c callback.c
gcc: -lgtk-x11-2.0: linker input file unused because linking not done
gcc: -lgdk-x11-2.0: linker input file unused because linking not done
gcc: -latk-1.0: linker input file unused because linking not done
gcc: -lgdk_pixbuf-2.0: linker input file unused because linking not done
gcc: -lm: linker input file unused because linking not done
gcc: -lpangoxft-1.0: linker input file unused because linking not done
gcc: -lpangox-1.0: linker input file unused because linking not done
gcc: -lpango-1.0: linker input file unused because linking not done
gcc: -lgobject-2.0: linker input file unused because linking not done
gcc: -lgmodule-2.0: linker input file unused because linking not done
gcc: -ldl: linker input file unused because linking not done
gcc: -lglib-2.0: linker input file unused because linking not done
---------------------------------------------------------------------
per ogni file modificato dall'ultima compilazione.
Per il resto il programma funziona bene, perň questa cosa mi turba un po'.
Qualcuno sa dove sbaglio?
Grazie per ogni aiuto.
/*
 * Pomatto Luciano
 */

 dove sbaglio?
mi sa che il problema è nel flag -c
Dalla manpage del gcc:
       Linking is always the last stage unless you use one of the
       -c,  -S,  or -E options to avoid it (or unless compilation
       errors stop the whole process).  For the link  stage,  all
       .o  files  corresponding  to  source  files, -l libraries,
       unrecognized filenames (including named  .o  object  files
       and  .a archives) are passed to the linker in command-line
       order.

> mi sa che il problema è nel flag -c
vuoi dire che non devo includere la flag
`pkg-config --cflags --libs gtk+-2.0`
nella compilazione dei file oggetto?
per il resto l'opzione -c è necessaria perchè è l'unica che ti permette di
compilare in file .o, file oggetto.

 CC = gcc `pkg-config --cflags --libs gtk+-2.0`
L'errore è qui (anche se non è affatto un'errore).
Quando compili i file oggetto usa solamente `pkg-config --CFLAGS
gtk+-2.0`.
Ciao, auguri.
-- 
oOO()             |Nicholas Wieland|
/ _/              |nicholas_wieland|
|/ [ Step on the ]|    @
yahoo.it
   |
\_)[  right foot ]|________________|



calma. Prima colpili i file oggetto e poi linki.
Quindi prima ti lanci la serie di:
gcc `pkg-config --cflags gtk+-2.0` -c file.c
e alla fine
gcc `pkg-config --libs gtk+-2.0` -o nome_programma file1.o file2.o ....
Nel primo ci va il -c, nel secondo no.

 gtk+-2.0`.
onestamente... non ho capito nei minimi particolari quale fosse il problema,
cmq grazie tante.
Auguri.

 - redrum :

Non c'è nessun problema, semplicemente pkg-config espande delle opzioni
che nella compilazione dei tuoi .o sono superflue: GCC ti avverte che
non stà usando quelle opzioni.
Ciao
