Librerie compilate in C e prototipi

Buon giorno,
esiste un sistema per vedere quali sono in fedora i file libreria compilati a cui fanno riferimento i prototipi della libreria standard del C?
Grazie anticipatamente.

non so se ho inquadrato il problema:
chiedi a quali moduli di libreria sono collegati gli header delle routine di librerie standard C , e come fare per saperlo.
gli header sono collegati ai moduli corrispondenti che sono archiviati tutti insieme in file binari del tipo libstdc++.so
libgcc_s-4.4.0-20090506.so.
tu vuoi sapere esattamente quali.
credo, ma non ne sono sicuro che tu debba usare le binutils:
http://sourceware.org/binutils/docs-2.19/binutils/index.html
il cui pacchetto è disponibile nei repo ufficiali,
e i corrispondenti comandi.

Dare il comando:

ldd nomeeseguibilelinkatodinamicamente

è quello che cerchi? Perchè neanch’io sono sicurissimo di aver capito cosa chiedi :slight_smile:

Innanzitutto grazie di avermi risposto così celermente. La mia domanda nasce dal fatto che ho deciso di approfondire il C per comprendere meglio come lavora la macchina su cui è praticamente fondata la mia attività professionale. Studiando un libro " Corso completo di C di M. Deitel e Paul J. Deitel", (bellissimo tra l’ altro soprattutto nella parte del simpletron) mi sono sopreso come ci fossero pochissime parole riservate. Ad esempio printf che in altri linguaggi sarebbe riservata o parola chiave, è già una funzione. Però il libro spiega l’utilizzo dei prototipi delle librerie standard, e non parla di come le funzioni delle librerie standard SONO programmate e DOVE sono nel sistema operativo (tra l’altro già compilate).
Allora volevo fare almeno una volta in Fedora il seguente percorso didattico almeno per la funzione printf

  1. Prendere in considerazione la funzione printf
  2. Vedere il suo prototipo in stdio.h
  3. Capire quale è il file binario di libreria collegato a quella funzione possibilente con un comando.
  4. trovare il codice sorgente su internet della libreria di cui al punto 3) con google e vedere come è fatto printf.
    Dunque fondamentale per me sarebbe vedere come si fa da un file *.h a capire quali file *.so o *.a muove.
    Proverò a leggermi i suggerimenti che mi avete dato.

Avrei una domanda correlata anch’io se posso.
Come faccio a linkare un file .so in un crosscompilatore?
ho provato:
arm_v5t_le-gcc -L/usr/lib -lfreeimage -g main.c -o conv

ma il risultato è stato:
/opt/mv_pro_4.0.1/montavista/pro/devkit/arm/v5t_le/bin/…/lib/gcc/armv5tl-montavista-linuxeabi/3.4.3/…/…/…/…/armv5tl-montavista-linuxeabi/bin/ld: skipping incompatible /usr/lib/libfreeimage.so when searching for -lfreeimage
/opt/mv_pro_4.0.1/montavista/pro/devkit/arm/v5t_le/bin/…/lib/gcc/armv5tl-montavista-linuxeabi/3.4.3/…/…/…/…/armv5tl-montavista-linuxeabi/bin/ld: cannot find -lfreeimage

usr/lib, poiché ho scaricato il pacchetto freeimage da yum, contine il file libfreeimage.so

non capisco cosa significhi “skipping incompatibile” nè come evitarlo. arm_v5t_le-gcc non mi ha mai dato problemi, di solito si è sempre andato a prendere le funzioni da solo (se non metto librerie mi dice “missing reference”).
I file .so sono dei file binari contenenti le definizioni delle funzioni di un header giusto?

Grazie

P.S.
gcc -lfreeimage -g main.c -o conv funziona benissimo.

I file .so sono delle librerie che possono essere linkate dinamicamente (ergo in runtime) dai programmi. Sono paragonabili alle dll in ambiente windows.
Non sono un esperto di cross compiling (mai provato :-)), quello che so è che le librerie presenti in /usr/lib sono compilate per architetture x86 e in quanto tali il compilatore per arm non può utilizzarle. Nel tuo caso penso tu debba compilarti a mano la libreria freeimage sempre con il compilatore per arm.