2010-11-08 6 views
5

Mi línea de enlace a gcc incluye las dos entradas siguientes en la sucesión:¿Cómo el enlazador gcc elige/usr/lib versus/usr/lib64 para la resolución de la biblioteca?

-lrt 
-lpam 

Y esto aparece expandido como:

/usr/lib64/librt.so /usr/lib/libpam.so 

Por qué se RT resolvió lib64 mientras que Pam se resuelve a lib y falla en consecuencia :

/usr/lib/libpam.so: could not read symbols: File in wrong format 

Dado que solo tiene 32 bit ELF. Hay un /usr/lib64/libpam.so con un ELF de 64 bits, ¿por qué no se toma?

+0

¿estás usando libtool? – Flexo

+1

@awoodland ¿Cómo podría saberlo? – WilliamKF

Respuesta

1

Pruebe usar -m32 para forzar 32 bits. También inspeccione las variables del entorno que establezca su .bashrc o .bash_profile para las cuales está compilando para determinar si algo está cruzado.

+0

Norrid Pero quiero forzar 64 bit. Intentó -m64 y todavía /usr/lib/libpam.so es recogido. – WilliamKF

+0

¿Qué sistema operativo está ejecutando? Ha vuelto a instalar las bibliotecas necesarias de su paquete de distribución a través de apt-get o dpkg (en Debian o Ubuntu). Además, ¿se aseguró de que .bashrc y .bash_profile estén limpios? –

+0

Este es Linux Centos 5. Todos los demás aspectos de la máquina y la compilación están bien, es solo esta una biblioteca que viene de la versión de 32 bits en lugar de la versión de 64 bits, aunque ambos están disponibles. – WilliamKF

Cuestiones relacionadas