Otro

Mac ¿Cómo evitar los 'símbolos indefinidos para la arquitectura x86_64'?

mikezang

a
Poster original
22 de mayo de 2010
Tokio, Japón
  • Jul 25, 2015
Intenté crear una compilación cruzada para mi antiguo Lego RCX, uso GCC 3.3.6 y NEWLIB 1.13.
Código: 1. Download GCC 3.3.6 and Unzip cd ../.. wget http://gcc.parentingamerica.com/releases/gcc-3.3.6/gcc-3.3.6.tar.gz tar xzvf gcc-3.3.6/gcc-3.3.6.tar.gz 2. Download NEWLIB 1.13 and unzip wget ftp://sourceware.org/pub/newlib/newlib-1.13.0.tar.gz tar xzvf newlib-1.13.0.tar.gz 3. Link NEWLIB to GCC cd gcc-3.3.6/ ln -s ../newlib-1.13.0/newlib . 4. Make h8300-hms build folder cd .. mkdir build_gcc_h8300-hms 5. Config ../gcc-3.3.6/configure --prefix=/usr/local/h8300-hms --program-prefix=h8300-hms- --target=h8300-hms --enable-languages=c,c++ --with-newlib 6. Make make CFLAGS='-O2 -fomit-frame-pointer' all
Cuando lo hago, por fin recibí el error que se muestra a continuación, ¿qué puedo hacer?
Código: gcc -c -O2 -fomit-frame-pointer -DIN_GCC -DCROSS_COMPILE -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -DHAVE_CONFIG_H -I. -Icp -I../../gcc-3.3.6/gcc -I../../gcc-3.3.6/gcc/cp -I../../gcc-3.3.6/gcc/config -I../../gcc-3.3.6/gcc/../include ../../gcc-3.3.6/gcc/cp/cp-lang.c -o cp/cp-lang.o gcc -O2 -fomit-frame-pointer -DIN_GCC -DCROSS_COMPILE -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wtraditional -pedantic -Wno-long-long -DHAVE_CONFIG_H -o cc1plus cp/call.o cp/decl.o cp/expr.o cp/pt.o cp/typeck2.o cp/class.o cp/decl2.o cp/error.o cp/lex.o cp/parse.o cp/ptree.o cp/rtti.o cp/spew.o cp/typeck.o cp/cvt.o cp/except.o cp/friend.o cp/init.o cp/method.o cp/search.o cp/semantics.o cp/tree.o cp/repo.o cp/dump.o cp/optimize.o cp/mangle.o cp/cp-lang.o attribs.o c-common.o c-format.o c-pragma.o c-semantics.o c-lex.o c-dump.o c-pretty-print.o c-opts.o main.o libbackend.a libcpp.a ./intl/libintl.a -liconv ../libiberty/libiberty.a Undefined symbols for architecture x86_64: '_libc_name_p', referenced from: _nothrow_libfn_p in except.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[1]: *** [cc1plus] Error 1 make: *** [all-gcc] Error 2

Madd el cuerdo

a
8 de noviembre de 2010


Utah
  • 2 de agosto de 2015
Lo que está sucediendo es que el vinculador de OS X no puede encontrar la función especificada en nada de lo que está tratando de vincular. La razón de esto podría ser la falta de una macro de preprocesador, o el código compilado y / o la biblioteca no están vinculados.

mikezang

a
Poster original
22 de mayo de 2010
Tokio, Japón
  • 4 de agosto de 2015
Madd the Sané dijo: Lo que está sucediendo es que el enlazador de OS X no puede encontrar la función especificada en nada de lo que está tratando de enlazar. La razón de esto podría ser la falta de una macro de preprocesador, o el código compilado y / o la biblioteca no están vinculados.
¡Gracias por tu mensaje! ¿puedes decirme cómo solucionar este problema? C

cqexbesd

4 de junio de 2009
Alemania
  • 4 de agosto de 2015
mikezang dijo: ¡Gracias por tu mensaje! ¿puedes decirme cómo solucionar este problema?

Solo estoy adivinando aquí, pero creo que es posible que deba tener instalado gperf. Luego comience a construir desde cero, es decir, haga distclean o similar, o simplemente elimine su directorio y expanda el archivo tar nuevamente.

Cromulento

Oct 2, 2006
La tierra de la esperanza y la gloria
  • 4 de agosto de 2015
mikezang dijo: ¡Gracias por tu mensaje! ¿puedes decirme cómo solucionar este problema?

Parece que está utilizando el GCC incorrecto.

Escriba la ruta completa a GCC 3.3.6 o agréguela a la ruta con un nombre diferente al de GCC (porque Apple ya proporciona un comando GCC que en realidad ejecuta clang). Es por eso que tiene el siguiente error:

ld: símbolo (s) no encontrado para la arquitectura x86_64

clang: error: el comando del vinculador falló con el código de salida 1 (use -v para ver la invocación)

En realidad, está ejecutando Clang que se compila en x86_64. Necesita ejecutar el GCC que compiló. Normalmente, al compilar GCC como un compilador cruzado, le da un nombre diferente al de GCC (que es una de las opciones de script de configuración para GCC al compilarlo) para que pueda diferenciar entre el GCC proporcionado por el sistema y su propio cruce de GCC. compilador.

mikezang

a
Poster original
22 de mayo de 2010
Tokio, Japón
  • 4 de agosto de 2015
cqexbesd dijo: Solo estoy adivinando aquí, pero creo que es posible que deba tener instalado gperf. Luego comience a construir desde cero, es decir, haga distclean o similar, o simplemente elimine su directorio y expanda el archivo tar nuevamente.
¡Excelente! Anoche encontré esta página http://stackoverflow.com/questions/3040801/error-compiling-gcc-undefined-reference-to-libc-name-p , el error desaparece después de seguirlo.