2009-08-09 23 views
14

Sto provando a creare un passaggio utilizzando llvm e ho terminato la costruzione di llvm e dei suoi componenti associati. Tuttavia, quando eseguo make dopo aver seguito tutti i passaggi per costruire un passaggio compreso il makefile, ottengo il seguentePassaggio di un flag gcc tramite makefile

delocalizzazione R_X86_64_32 contro `un simbolo locale' non può essere utilizzato quando si effettua un oggetto condiviso; ricompilare con -fPIC

Dopo aver tentato di trovare una soluzione cercando su google il messaggio di errore, sono venuto a sapere che questo non è specifico per llvm. Alcune soluzioni suggerivano che dovevo usare "--enable-shared" durante l'esecuzione di configure, ma questo non aiutava il mio caso. Ora voglio ricostruire llvm usando fPIC, come dice l'errore. Ma come faccio a usare il makefile?

+0

possibile duplicato di [Riconversione con l'opzione -fPIC, ma l'opzione è già nella makefile] (http: // StackOverflow .com/questions/332767/ricompilare-con-opzione-ffi-ma-l'-opzione-è-già-nel-make-file) – senderle

risposta

11

Sembra che si potrebbe aggiungere il -fPIC (per codice indipendente dalla posizione, qualcosa che si desidera per una libreria condivisa che potrebbe essere caricato in qualsiasi indirizzo) impostando variabili di shell:

export CFLAGS="$CFLAGS -fPIC" 
export CXXFLAGS="$CXXFLAGS -fPIC" 

Guardando Makefile.rules, questi saranno raccolti e usati. Sembra strano che non fosse lì per cominciare.

EDIT:

In realtà, la lettura più nei makefile, ho trovato questo link al LLVM Makefile Guide. Da Makefile.rules, l'impostazione di SHARED_LIBRARY = 1 o LOADABLE_MODULE = 1 (che implica SHARED_LIBRARY) in Makefile inserirà -fPIC nei flag del compilatore.

5

Se state moderatamente convinto che si dovrebbe usare '-fPIC' in tutto il mondo (o '-m32' o '-m64', che ho bisogno di più di frequente), quindi è possibile utilizzare il 'trucco':

CC="gcc -fPIC" ./configure ... 

Ciò presuppone una shell Bourne/Korn/POSIX/Bash e imposta la variabile di ambiente CC su "gcc -fPIC" prima di eseguire lo script di configurazione. Questo (di solito) garantisce che tutte le compilazioni vengano eseguite con i flag specificati. Per impostare la corretta 'bittiness' della compilation, a volte funziona meglio dei vari altri meccanismi che trovi - è difficile che una compilation si divincoli attorno ad essa, ignorando completamente il fatto che hai specificato il compilatore C da usare.

1

Un'altra opzione è quella di passare -fPIC direttamente per fare nel seguente modo:

make CFLAGS='-fPIC' CXXFLAGS='-fPIC' 
+1

Questo non funzionerà perché sostituisce CFLAGS del Makefile. –

+0

Ha funzionato per me. L'hai provato? – Datageek

+3

L'ho provato :) Il tuo esempio funziona per casi semplici. Ma quando hai un CFLAGS definito nel makefile, verrà sovrascritto, supponendo che il tuo makefile contenga qualcosa come '$ (CC) $ (CFLAGS)' –

Problemi correlati