2010-12-28 17 views
11

Qual è la differenza tra il collegamento a gcc_s e gcc tramite LDFLAGS? gcc_s è una libreria statica e una libreria condivisa gcc?differenza tra -lgcc_s e gcc

Perché stavo cercando una soluzione in cui è menzionato il collegamento con gcc considerando che solo gcc_s funziona nel mio caso. Vorrei sapere la vera differenza.

< < simbolo nascosto `__name_here' in /some/library/path.a(_filename.o) fa riferimento DSO

In questo caso, il problema è di solito risolto con l'aggiunta di uno "gcc -l "o" gcc -print-libgcc-file-name "ai flag di collegamento (LDFLAGS). Tuttavia, a differenza delle altre piattaforme regolari (i386, amd64, sparc64) qui non era abbastanza. Dopo un sacco di head-banging (per essere onesti, viene anche dalla musica) ho capito che questo flag è necessario sia collegando la libc e al file eseguibile finale. link: http://people.defora.org/~khorben/200903.html

+0

C'è anche 'libgcc_eh.a', che viene usato quando viene usato' -static'. http://stackoverflow.com/questions/10763394/how-to-build-ac-program-using-a-custom-version-of-glibc-and-static-linking –

risposta

12

libgcc_s.so è una libreria condivisa, libgcc.a è una libreria statica. Non sono equivalenti; potrebbe essere necessario collegare entrambi. libgcc_s contiene variabili globali che non devono avere più copie in un processo; il codice in libgcc è sicuro per collegare più volte.

+0

Ciao, grazie, << potrebbe essere necessario collegare entrambi. Quando sorgerà questa necessità? – kumar

+3

@kumar: alcuni simboli (ad esempio '__register_frame') sono solo in libgcc_s, altri (ad esempio' __eprintf') sono solo in libgcc. Usa 'nm -D - respinto solo per libgcc_s.so'. 'nm --defined-only libgcc.a' per ottenere liste complete da confrontare. –

+1

Perché abbiamo bisogno di entrambi? Perché non sono la stessa cosa, solo una statica e l'altra dinamica? –