2012-02-01 10 views
6

Tengo ELDK-3.1 instalado en una caja Ubuntu que funciona perfectamente.ELDK error del enlazador gcc en ld.so.1

En otra máquina, ejecutando 64 bits OpenSuse 12.1, cloné la instalación de ELDK y, durante un tiempo, funcionó muy bien.

Ahora, cuando intento configurar mis proyectos ver:

configure: error: C compiler cannot create executables 
See `config.log' for more details 

Y el registro de muestra:

configure:3411: ppc-linux-gcc conftest.c >&5 
/opt/ELDK-3.1/usr/bin/../lib/gcc-lib/ppc-linux/3.3.3/../../../../ppc-linux/bin/ld: warning: ld.so.1, needed by /opt/ELDK-3.1//usr/../ppc_8xx/lib/libc.so.6, not found (try using -rpath or -rpath-link) 
/opt/ELDK-3.1//usr/../ppc_8xx/lib/libc.so.6: undefined reference to `[email protected]_PRIVATE' 
... 

El archivo ld.so.1 está en el mismo directorio que libc.so.6.

s -l /opt/ELDK-3.1//usr/../ppc_8xx/lib/ld.so.1 
lrwxrwxrwx 1 root root 11 Jan 31 11:43 /opt/ELDK-3.1//usr/../ppc_8xx/lib/ld.so.1 -> ld-2.3.1.so 

Por lo que yo puedo ver, estoy definiendo correctamente todo el ambiente necesario y tratando de construir utilizando exactamente el mismo sistema de construcción como en el cuadro de Ubuntu (el proyecto está "automaked").

Así que escribió un guión que intenta imitar todo lo que mi automaked configure hace:

#!/bin/bash 


if [ ! -f confdefs.c ]; then 
    cat > confdefs.c << EOF 
/* confdefs.h */ 
#define PACKAGE_NAME "xyz" 
#define PACKAGE_TARNAME "xyz" 
#define PACKAGE_VERSION "1.00" 
#define PACKAGE_STRING "xyz 1.00" 
#define PACKAGE_BUGREPORT "<[email protected]>" 
#define PACKAGE_URL "" 
#define PACKAGE "xyz" 
#define VERSION "1.00" 
/* end confdefs.h. */ 

int 
main() 
{ 

; 
return 0; 
} 
EOF 
fi 

ARCH=powerpc 
export CROSS_COMPILE=ppc_8xx 
TOOLCHAIN=ppc-linux- 
TOOLCHAIN_ROOT=/opt/ELDK 
LD=`which ${TOOLCHAIN}ld` 
CC=`which ${TOOLCHAIN}gcc` 
GCC=$CC 
export CFLAGS="-Wall -g -I${TOOLCHAIN_ROOT}/ppc_8xx/usr/include/" 
export CPPFLAGS=$CFLAGS 
# export LDFLAGS="-shared" 

$CC $CFLAGS $LDFLAGS confdefs.c -o confdefs 

Esto me da exactamente el mismo error que configure.

¡Si descomenta la línea export LDFLAGS="-shared", por otro lado, se construye perfectamente !.

> ls -l confdefs 
-rwxr-xr-x 1 myself users 16136 Fev 1 09:52 confdefs 
> file confdefs 
confdefs: ELF 32-bit MSB shared object, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, not stripped 

Podría alguien aquí por favor, dame alguna idea de lo que me falta para que mis proyectos de trabajo finamente en una caja y no en el otro?

Gracias!

+0

Intenta ejecutar automake y autoconf nuevamente en tu proyecto. Por cierto, la extensión .so significa que es un objeto compartido, debe tener "-shared" habilitado para usar correctamente esos objetos compartidos. –

+1

Tiene el mismo error que yo, al cambiar a Fedora 16 x86_64. Hasta ahora hemos encontrado una solución agregando el siguiente enlace simbólico "ld.so.1 -> ../../../ppc_8xx/lib/ld.so.1" a eldk-3.1/usr/ppc-linux/lib Sospecho que algo cambió con el entorno entre F15 y F16. Lo mismo para OpenSUSE (11-> 12). –

+0

Hola, Sergey, por favor, envía una respuesta para que yo pueda elegirla. Su solución alternativa funcionó para mí. Tiene algún sentido ya que los scripts del enlazador apuntan a algo como 'SEARCH_DIR ("/usr/ppc-linux/lib ")', pero todavía no puedo entender por qué funciona en una distribución y no en otra. Supongo que se trata de diferencias en sus paquetes de desarrollo (autotools o algo así). ¡Gracias! – j4x

Respuesta

6

No estoy 100% seguro de que resuelve todos los problemas, pero funciona para nosotros.

Descubrimos que el enlace simbólico "ld.so.1 -> ../../../ppc_8xx/lib/ld.so.1" con eldk-3.1/usr/ppc-linux/lib resuelve el error de enlace .

Sospecho que algo cambió con el entorno entre F15 y F16. Lo mismo para OpenSUSE (11-> 12). También se presentó un error en contra de Fedora https://bugzilla.redhat.com/show_bug.cgi?id=754695 que finalizó como cambios ABI intencionales.

+1

esto fue muy útil para mí, gracias. Funciona para versiones anteriores de ELDK también. – Nikko

Cuestiones relacionadas