De Outros

Mac Como evitar 'Símbolos indefinidos para a arquitetura x86_64'?

Mikezang

para
Pôster original
22 de maio de 2010
Tóquio, Japão
  • 25 de julho de 2015
Tentei criar uma compilação cruzada para meu antigo Lego RCX, uso GCC 3.3.6 e 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
Ao fazer isso, finalmente obtive o erro abaixo, o que posso fazer?
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 the Sane

para
8 de novembro de 2010


Utah
  • 2 de agosto de 2015
O que está acontecendo é que o vinculador do OS X não consegue encontrar a função especificada em nada que esteja tentando vincular. O motivo para isso pode ser uma macro de pré-processador ausente ou o código compilado e / ou biblioteca não está sendo vinculado.

Mikezang

para
Pôster original
22 de maio de 2010
Tóquio, Japão
  • 4 de agosto de 2015
Madd the Sane disse: O que está acontecendo é que o vinculador do OS X não consegue encontrar a função especificada em nada que esteja tentando vincular. O motivo para isso pode ser uma macro de pré-processador ausente ou o código compilado e / ou biblioteca não está sendo vinculado.
Obrigado pela sua mensagem! você pode me dizer como resolver esse problema? C

cqexbesd

4 de junho de 2009
Alemanha
  • 4 de agosto de 2015
mikezang disse: Obrigado pela sua mensagem! você pode me dizer como resolver esse problema?

Estou apenas supondo aqui, mas acho que pode ser necessário ter o gperf instalado. Em seguida, comece a compilar do zero - ou seja, faça distclean ou semelhante - ou apenas exclua seu diretório e expanda o arquivo tar novamente.

Cromulento

2 de outubro de 2006
A Terra de Esperança e Glória
  • 4 de agosto de 2015
mikezang disse: Obrigado pela sua mensagem! você pode me dizer como resolver esse problema?

Parece que você está usando o GCC errado.

Digite o caminho completo para GCC 3.3.6 ou adicione-o ao caminho com um nome diferente de GCC (porque a Apple já fornece um comando GCC que realmente executa o clang). É por isso que você tem o seguinte erro:

ld: símbolo (s) não encontrado (s) para arquitetura x86_64

clang: erro: o comando do linker falhou com o código de saída 1 (use -v para ver a chamada)

Na verdade, você está executando o Clang, que compila para x86_64. Você precisa executar o GCC que compilou. Normalmente, ao compilar o GCC como um compilador cruzado, você dá a ele um nome diferente do GCC (que é uma das opções de configuração do script para o GCC ao compilá-lo) para que você possa dizer a diferença entre o GCC fornecido pelo sistema e o seu próprio cruzamento GCC compilador.

Mikezang

para
Pôster original
22 de maio de 2010
Tóquio, Japão
  • 4 de agosto de 2015
cqexbesd disse: Estou apenas supondo aqui, mas acho que pode ser necessário ter o gperf instalado. Em seguida, comece a compilar do zero - ou seja, faça distclean ou semelhante - ou apenas exclua seu diretório e expanda o arquivo tar novamente.
Excelente! Ontem à noite eu encontrei esta página http://stackoverflow.com/questions/3040801/error-compiling-gcc-undefined-reference-to-libc-name-p , o erro desaparece após segui-lo.