2009-08-09 16 views
14

Estoy intentando construir un pase usando llvm y he terminado de construir llvm y sus componentes asociados. Sin embargo, cuando corro hacer después de seguir todos los pasos para construir un pase que incluye la makefile, me sale el siguientePasando un indicador de gcc a través del archivo MAKE

R_X86_64_32 reubicación contra `un símbolo local' no se pueden utilizar cuando se hace un objeto compartido; recompilar con -fPIC

Después tyring para encontrar una solución buscando en Google el mensaje de error, llegué a saber que esto no es específico de llvm. Algunas soluciones sugirieron que debería usar "--enable-shared" mientras ejecutaba configure, pero eso no ayudó a mi caso. Ahora quiero volver a construir llvm usando fPIC, como dice el error. Pero, ¿cómo hago esto usando el archivo MAKE?

+0

posible duplicado de [Recompile con la opción -fPIC, pero la opción ya está en el makefile] (http: // stackoverflow .com/questions/332767/recompile-with-fpic-option-but-the-option-is-already-in-the-makefile) – senderle

Respuesta

11

Parece que podría añadir la -fPIC (por código independiente de la posición, algo que desea para una biblioteca compartida que se podría cargar en cualquier dirección) mediante el establecimiento de variables de shell:

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

En cuanto a Makefile.rules, estos serán recogidos y utilizados. Parece extraño que no estaba allí para empezar.

EDIT:

En realidad, la lectura más en los archivos make, me encontré con este enlace a la LLVM Makefile Guide. Desde Makefile.rules, establecer SHARED_LIBRARY = 1 o LOADABLE_MODULE = 1 (que implica SHARED_LIBRARY) en Makefile colocará -fPIC en los indicadores del compilador.

5

Si está moderadamente convencido de que se debe utilizar '-fPIC' en todas partes (o '-m32' o '-m64', que necesito más frecuentemente), entonces se puede usar el 'truco':

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

Esto supone un shell Bourne/Korn/POSIX/Bash y establece la variable de entorno CC en 'gcc -fPIC' antes de ejecutar el script de configuración. Esto (generalmente) asegura que todas las compilaciones se realicen con los indicadores especificados. Para establecer la 'bittiness' correcta de la compilación, esto a veces funciona mejor que los otros mecanismos que se encuentran: es difícil para una compilación moverse a su alrededor, excepto al ignorar por completo el hecho de que usted especificó el compilador de C para usar.

1

Otra opción es pasar -fPIC directamente para hacer de la siguiente manera:

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

Esto no funcionará porque anula las CFLAGS de Makefile. –

+0

Funcionó para mí. ¿Lo has probado? – Datageek

+3

Lo he intentado :) Su ejemplo funciona para casos simples. Pero cuando tiene un CFLAGS definido en el archivo MAKE será anulado, asumiendo que su archivo MAKE contiene algo como '$ (CC) $ (CFLAGS)' –

Cuestiones relacionadas