Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C/C++] Domande sulla compilazione

    Ciao...
    Ho un paio di domande da porvi riguardante la compilazione:

    1. - ho visto che i programmi normalmente sono composti da più d'un file .c (o .cpp), e tutti questi file *.c diventano, una volta compilati, file.o....
    Come faccio a fare un programma composto da più file .c e poter utilizzare funzioni definite in un altro file?

    2. - Come si realizzano i Makefile e i configure? Esiste qualche tutorial in italiano?


    Mi interessa soprattutto la compilazione sotto Linux con gcc e g++, ma vanno bene info anche per la compilazione con altri os e compilatori


    Grazie
    PuffolottO

  2. #2
    Utente di HTML.it L'avatar di Yojimbo
    Registrato dal
    Nov 2003
    Messaggi
    104
    i file scritti in C/C++ vengono compilato in 2 passaggi, raramente o solo per piccole applicazioni passano direttamene a codice eseguile ( nel caso di un solo file di codice, cose del tipo "hello world" o "lista puntata"). in tutti gli altri casi ogni sorgente viene ompilato in un file di codie oggetto, asembler in cui i collegamenti con le altre librerie ( che generalizzando nn sono altro che archivi di file oggetto ) non sono un vero e propio inidirizzo di memoria da cui andare a chiamare la funzione ma contiene il suo nome. nella fase di linkage i nomi vengono risolti direttamente tra i file oggetto che unirai in un solo file mentre gli altri dipende dal sistema utilizzato dal SO per gestire gli inidirizzi delle funzioni ( detti simboli ) per esempio ELF, Mach-O ,COM e altri, sono i formati in cui il codice assembler e salvato in un file. per unire questi file io uso ld, o anche gcc (es. gcc main.o external_func.o -o a.out ) o se vuoi anche libtool. ld è il linker e nelle pagine man trovi tuta la documentazione che ti può servire.

    di tutorial sui make file non ne ho mai trovati in italiano e non penso debba consigliartene uno in inglese, ce ne sono un'infinità.per quanto riguarda i configure, non saprei dirti

  3. #3
    Grazie per la risposta
    Originariamente inviato da Yojimbo
    i file scritti in C/C++ vengono compilato in 2 passaggi, raramente o solo per piccole applicazioni passano direttamene a codice eseguile ( nel caso di un solo file di codice, cose del tipo "hello world" o "lista puntata"). in tutti gli altri casi ogni sorgente viene ompilato in un file di codie oggetto, asembler in cui i collegamenti con le altre librerie ( che generalizzando nn sono altro che archivi di file oggetto ) non sono un vero e propio inidirizzo di memoria da cui andare a chiamare la funzione ma contiene il suo nome. nella fase di linkage i nomi vengono risolti direttamente tra i file oggetto che unirai in un solo file mentre gli altri dipende dal sistema utilizzato dal SO per gestire gli inidirizzi delle funzioni ( detti simboli ) per esempio ELF, Mach-O ,COM e altri, sono i formati in cui il codice assembler e salvato in un file. per unire questi file io uso ld, o anche gcc (es. gcc main.o external_func.o -o a.out ) o se vuoi anche libtool. ld è il linker e nelle pagine man trovi tuta la documentazione che ti può servire.
    Capito! I file *.c diventano tutti... Potremmo definirli "librerie" (?) che vengono tutti insieme usati da un unico file: il linker, l'eseguibile...
    Mi sto leggendo il man di ld...
    Che cambia tra creare il linker con ld o col gcc?

    Per creare un linker col gcc basta che faccio: `gcc oggetto1.o oggetto2.o oggettoN.o -o eseguibile` una volta che ho compilato "oggetto1.c", "oggetto2.c" e "oggettoN.c", giusto?

    e "oggetto1.o", "oggetto2.o" e "oggettoN.o" come li creo?
    Se in "oggetto2.c" uso una funzione definita in "oggetto1.c" ricevo un errore di compilazione nel fare `gcc -o oggetto2.o oggetto2.c`, o sbaglio?

    Ho guardato l'output su shell di un Makefile, ho visto che l'ultimo output crea il linker, ma negli output precedenti non fa capire in nessun modo che quel file usa una funzione non sua... :master:
    Devo forse passare al gcc un opzione che non fa restituire errori "undefined function"?

    di tutorial sui make file non ne ho mai trovati in italiano e non penso debba consigliartene uno in inglese, ce ne sono un'infinità.per quanto riguarda i configure, non saprei dirti [/B]
    Ok... Cercherò un pò qualhe tutorial semplice su google...
    Ma i Makefile e i configure vanno fatti a manina come il codice c?
    Ho visto che i configure sono scritti in shellscript e normalmente superano le 5000 righe...
    Aiuto

  4. #4
    Utente di HTML.it L'avatar di Yojimbo
    Registrato dal
    Nov 2003
    Messaggi
    104
    i configure sò che sono enormi ma non ho mai prestato attenzione, imake file sono shell script (+o -) scritti in un modo particolare.
    per creare il docie oggetto da un file .c devi aggiungere l'opzione -c al gcc. se usi gcc come linker, chiama ld

  5. #5
    Utente di HTML.it L'avatar di Yojimbo
    Registrato dal
    Nov 2003
    Messaggi
    104
    dato che nel codice oggeto non sono definiti gli indirizzi delle funzioni ma solo i nomi a cui si iferisce, non darà funzione non definità, amse non è veramente definita poi ci pensa il linker a dare errore

  6. #6
    Perfetto
    Credo di aver capito...
    Ora mi basta modificare il mio programma... Per ora da un unico file .c richiamo 5 miei headers

    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.