他の

Mac「アーキテクチャx86_64の未定義のシンボル」を回避する方法は?

ミケザン

オリジナルポスター
2010年5月22日
東京、日本
  • 2015年7月25日
古いレゴRCXのクロスコンパイルを作成しようとしましたが、GCC3.3.6とNEWLIB1.13を使用しています。
コード: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
作ってみると、やっと以下のようなエラーが出ましたが、どうしたらいいですか?
コード: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

マッドザセイン

2010年11月8日


ユタ
  • 2015年8月2日
何が起こっているのかというと、OS Xのリンカは、リンクしようとしているものの中から指定された関数を見つけることができません。この理由は、プリプロセッサマクロが欠落しているか、コンパイルされたコードやライブラリがリンクされていない可能性があります。

ミケザン

オリジナルポスター
2010年5月22日
東京、日本
  • 2015年8月4日
マッド・ザ・セインは次のように述べています。何が起こっているのかというと、OS Xのリンカーは、リンクしようとしているものの中で指定された関数を見つけることができません。この理由は、プリプロセッサマクロが欠落しているか、コンパイルされたコードやライブラリがリンクされていない可能性があります。
メッセージありがとうございます!この問題を解決する方法を教えてください。 NS

cqexbesd

2009年6月4日
ドイツ
  • 2015年8月4日
mikezangは言った:あなたのメッセージをありがとう!この問題を解決する方法を教えてください。

ここで推測しているだけですが、gperfをインストールする必要があるかもしれません。次に、最初からビルドを開始します(つまり、distcleanなどを作成します)。または、ディレクトリを削除して、tarファイルを再度展開します。

群衆

2006年10月2日
希望と栄光の国
  • 2015年8月4日
mikezangは言った:あなたのメッセージをありがとう!この問題を解決する方法を教えてください。

間違ったGCCを使用しているようです。

GCC 3.3.6へのフルパスを入力するか、GCCとは異なる名前でパスに追加します(Appleは実際にclangを実行するGCCコマンドをすでに提供しているため)。これが、次のエラーが発生する理由です。

ld:アーキテクチャx86_64のシンボルが見つかりません

clang:エラー:リンカーコマンドが終了コード1で失敗しました(呼び出しを確認するには-vを使用してください)

実際には、x86_64にコンパイルされるClangを実行しています。コンパイルしたGCCを実行する必要があります。通常、GCCをクロスコンパイラとしてコンパイルするときは、GCC(コンパイル時のGCCの構成スクリプトオプションの1つ)とは異なる名前を付けて、システムによって提供されるGCCと独自のGCCクロスの違いがわかるようにします。コンパイラ。

ミケザン

オリジナルポスター
2010年5月22日
東京、日本
  • 2015年8月4日
cqexbesdは言った:私はここで推測しているだけですが、gperfをインストールする必要があるかもしれないと思います。次に、最初からビルドを開始します(つまり、distcleanなどを作成します)。または、ディレクトリを削除して、tarファイルを再度展開します。
素晴らしい!昨夜私はこのページを見つけました http://stackoverflow.com/questions/3040801/error-compiling-gcc-undefined-reference-to-libc-name-p 、それに従うとエラーはなくなります。