2011-11-08 6 views
5

I documenti GMP dicono che il collegamento statico può fornire un piccolo miglioramento delle prestazioni.Errore durante il collegamento statico di libgmp su Linux

Sto riscontrando un problema nel far legare staticamente libgmp sui miei sistemi Linux. Ho ristretto il problema che sto affrontando in un minuscolo test case.

gmptest.c

#include <gmp.h> 

int main(int argc, char** argv) { 
    mpz_t foo; 
    mpz_init(foo); 
    return 0; 
} 

Makefile:

all: clean gmptest static 

clean: 
    rm -f *.s 
    rm -f *.o 
    rm -f gmptest 
    rm -f static-gmptest 

gmptest: Makefile gmptest.c 
    gcc -std=c99 -O3 -lgmp gmptest.c -o gmptest 

static: clean Makefile gmptest.c 
    gcc -std=c99 -O3 -static /usr/lib/libgmp.a gmptest.c -o static-gmptest 

Il binario non statico viene compilato e collegato senza problemi, ma 'Make statica' produce:

gcc -std=c99 -O3 -static /usr/lib/libgmp.a gmptest.c -o static-gmptest 
/tmp/ccWSFke9.o: In function `main': 
gmptest.c:(.text+0x8): undefined reference to `__gmpz_init' 
collect2: ld returned 1 exit status 
make: *** [static] Error 1 

La libreria esiste:

[email protected]:~/Dropbox/static$ ls -lA /usr/lib/libgmp.a 
-rw-r--r-- 1 root root 1041666 2010-02-26 13:20 /usr/lib/libgmp.a 

Ho anche provato -lgmp per il collegamento statico, ma l'errore è lo stesso.

Questo è tutto su Ubuntu 10.04 e 10.10 AMD64.

Qualcuno può illuminarmi sull'errore evidente che sto facendo?

Grazie,

Chris.

+1

Hai provato a riordinare in modo che le librerie necessarie siano * dopo * gli utenti di libreria sulla riga di comando? – ephemient

risposta

9

Prova

gcc -std=c99 -O3 -static gmptest.c -lgmp -o static-gmptest 

poiché le librerie devono essere sempre collegati in buon ordine, e dopo il programma o il file oggetto che li utilizzano.

+0

Grazie, era l'ordine di collegamento. – fadedbee

+0

Questo succede abbastanza spesso alle persone nuove in C/C++. Mi chiedo se aggiungeranno qualche sorta di avvertimento in futuro. Farebbe sicuramente risparmiare un sacco di tempo. – Jendas