2012-02-20 14 views
8

Ho scaricato gdb-6.5.bz2.tar. Untar questo file. scrivo: LDFLAGS = -static ./configureCome posso costruire GDB statico dalla sorgente?

ma come risultato ho un gdb, che richiedono un file in modo che, per esempio: ncurses.so.5 libc.so.0 ecc

Come posso costruire staticamente?

+2

Probabilmente non si può. Se lo si desidera, è necessario ottenere versioni statiche di tutte le librerie dei prerequisiti, che è probabilmente una ricompilazione maggiore di quella che merita. Perché vuoi creare un GDB collegato staticamente? La versione collegata dinamicamente sarà molto più semplice. –

+3

@JonathanLeffler: Se si desidera eseguire il debug di un sistema appena riavviato, gdb con collegamento statico è estremamente prezioso. Ciò è ancora più vero se il nuovo sistema utilizza un ABI incompatibile dal sistema originale su cui si sta sviluppando, ad esempio una diversa libc o una diversa convenzione di chiamata predefinita. –

+0

@R ..: bene, ma poi dovrai ottenere o creare una libreria statica per ogni libreria con cui GDB si collega. Su un sistema RHEL 5, ciò significa: libreadline.so.5, libncurses.so.5, libm.so.6, libexpat.so.0, libdl.so.2, libc.so.6,/lib64/ld- linux-x86-64.so.2 se l'output di 'ldd/usr/bin/gdb' deve essere considerato attendibile. Non sono sicuro di voler davvero sostituire tutti quelli con librerie statiche, ma questa è la lista di librerie condivise usate da 'gdb' su questa (antica) piattaforma. –

risposta

7

This message sembra implicare che l'utilizzo corretto è

$ make LDFLAGS=-static 

Il che sembra sorprendente. Sfortunatamente, dice anche che non riesce a costruire, e non ci sono follow-up. Il messaggio è ancora del 1999, quindi tutto potrebbe essere cambiato, forse il modo giusto oggi è di farlo a modo tuo.

+0

Sembra non funzionare per gdb-7. – Equidamoid

6

È possibile utilizzare le seguenti opzioni per configure script per generare uno statico GDB eseguibile:

./configure --prefix=<> --enable-static=yes && make && make install 
1

Sia gcc e gdb mancanza di rispetto alla bandiera --enable-static che dovrebbe essere passato al configure, il modo corretto per fare questo è:

Nel caso di gdb 8.0, si deve aggiungere anche il --disable-interprocess-agent per costruire con successo una versione statica:

mkdir build-gdb && cd build-gdb && ../configure --prefix=... --enable-static --disable-interprocess-agent ...

Nel caso di gcc 7.1, si deve aggiungere anche il --disable-libcc1 per costruire con successo una versione statica:

mkdir build-gcc && cd guild-gcc && ../configure --prefix=... --enable-static --disable-shared --disable-libcc1 ...

Problemi correlati