2009-03-10 17 views
14

Estoy tratando de construir Python 2.6 para QGIS en RHEL 5. Durante la realización de QGIS me sale el siguiente error:¿Cómo puedo configurar ccshared = -fPIC mientras ejecuto ./configure?

Linking CXX shared library libqgispython.so 
/usr/bin/ld: /usr/local/lib/python2.6/config/libpython2.6.a(abstract.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC 
/usr/local/lib/python2.6/config/libpython2.6.a: could not read symbols: Bad value 
collect2: ld returned 1 exit status 
make[2]: *** [src/python/libqgispython.so.1.0] Error 1 
make[1]: *** [src/python/CMakeFiles/qgispython.dir/all] Error 2 
make: *** [all] Error 2 

Lo que averiguar de este error es que necesito para construir con Python 2.6 alguna bandera, -fPIC. Bien, entonces lo encontré en el archivo configure.in pero comprueba varias condiciones y en base a esas condiciones, asigna -fPIC al CCSHARED.

Lo que hice fue que, después de verificar todas las condiciones, agregué la siguiente línea para usar deliberadamente CCSHARED como -fPIC.

CCSHARED="-fPIC"; 

Pero no funcionó ..

cómo especificar durante la configuración que quiero establecer CCSHARED como -fPIC?

Respuesta

14

Ejecuta la configuración con --enable-shared. A continuación, se incluirá -fPIC como parte de las banderas compartidas.

+4

Desafortunadamente, cuando intenté ejecutar './configure--enable-shared', esto causó que muchos módulos importantes de Python no se compilaran (estoy intentando compilar Python 2.7.3 para un sistema Ubuntu 11.04 de 64 bits) En lugar de agregar '--enable-shared', tuve que editar' Makefile' y agregar '-fPIC' después de' CC = 'según la respuesta de ashishsony a continuación. –

+1

Mis módulos no se pudieron construir también, pero eso se debe a que ya tenía el libpython2.7a mal instalado en/usr/local/lib! Eliminado eso y reran 'make', y todo fue feliz. –

+0

Estaba instalando en Linux Linux 6.4 utilizando módulos de entorno. Tuve que eliminar la instalación anterior –

0

¿No es así CCFLAGS? (No ha sido ese lado del mundo por un tiempo.)

3
  1. Run ./configure --help, posiblemente tubería a grep PIC, para ver si hay una opción para habilitar esta
  2. intente configurar la variable de entorno antes de ejecutar configure , p.ej CCSHARED = - ./configure (como un solo comando, en el supuesto de bash)

Si ninguno de los trabajos, es necesario leer el código de configuración y entender las condiciones que las pruebas para mejor "fPIC".

6

Lo tengo trabajo mediante la adición de -fPIC después CC= gcc -pthread, es decir CC= gcc -pthread -fPIC en el Makefile.

+0

en CentOS 6.5, compilación de Python -2.7.5 con './configure--enable-shared' dio como resultado un error:' '.rodata.str1.8' no se puede usar al crear un objeto compartido; recompilar con -fPIC'. Tuve que editar el Makefile y agregar -fPIC a la variable como se describe. Esto lo solucionó, pero me molesta que tuve que hacer esto, pero compilar en otras máquinas con Mac y Ubuntu nunca tuvo este problema, investigaré más a fondo si tengo el tiempo. – lukecampbell

0

Como se indicó en otra parte, ejecutar configure con --enable-shared debería hacer que se incluya -fPIC en los indicadores del compilador. Sin embargo, aún puede ver el error "No se pudo leer símbolos" si intenta hacer una compilación paralela utilizando, por ejemplo, 'make -j8'. Tuve este mismo error en RHEL 5.2 y solo desapareció cuando eliminé el '-j8' de mi invocación de make ...

+0

Just seconding la respuesta de evadeflow: debería usar --enable-shared, y si eso no es suficiente, compilar usando solo un hilo (opción no -j). Encontré la segunda parte necesaria en una computadora Scientific Linux SLF release 5.7 cuando instalé Python 2.7.2. –

+0

Creo que si compila Python primero sin configurar '--enable-shared', intentar hacerlo posteriormente provocará un error épico ya que la lib estática estará en la ruta, pero el archivo MAKE claramente busca algo más –

0

reconstruí el openssl con ./config --prefix =/software/bea/openssl/100c --openssldir =/software/bea/openssl/100c/ssl shared -fPIC

y luego también funciona. dio/usr/bin/ld: enlaces fallidos. Modificamos la parte de enlace en el archivo que anteriormente era gcc -Wall -shared -o pwutil.so asciihex.o base64.o bitutils.o dict.o gen_rand.o key_schedule.o md5c.o pdg2_ecb.o pwutils. O random_data.o hexutils.o des3crypt.o blowcrypt.o /software/bea/openssl/1.0.0c/lib/libcrypto.a

cambiamos libcrypto.a a libcrypto.so después de reconstruir con la opción y compartida - fPIC

gcc -Wall -o -shared pwutil.so asciihex.o base64.o bitutils.o dict.o gen_rand.o key_schedule.o md5c.o pdg2_ecb.o pwutils.o random_data.o hexutils.o des3crypt.o blowcrypt.o /software/bea/openssl/1.0.0c/lib/libcrypto.por lo

y funcionó

3

Los siguientes trabajó para mí cuando me encontré con este error:

make clean 
./configure CFLAGS=-fPIC CXXFLAGS=-fPIC 
+0

This fue la única respuesta que funcionó para mí. –

+0

@ FishBiscuit ¡genial! por favor aumente para mostrar a los futuros televidentes que esta respuesta podría funcionar para ellos. – Crt

Cuestiones relacionadas