2012-02-08 15 views
3

gccリンカーに未定義シンボルをリンケージエラーとして表示させたくありません。 MAC OSX 10.6でgcc 4.2を使用していますgcc:未定義シンボルを許可する

もちろん、私は解決策をオンラインで見ましたが、すべての試行に失敗しました!

未定義シンボルのエラーを取り除くには、このコマンドを変更するにはどうすればよいですか?

gcc -o Proj $(wildcard *.o); 

ありがとうございました。

編集:私は、私はそれが実行時例外

+3

質問にはどのような関係があるでしょうか?また、リンクフェーズが失敗した場合、実行可能なバイナリをこの状態から取得する方法はありますか? ...それはエラーではなく、警告ではない理由があります;) – 0xC0000022L

+3

これはすべての時間の私のお気に入りの質問の一つです。 –

+0

ここにあるようなリンクエラーを抑制するオプションがあります。sourceware.org/binutils/docs/ld/Options.html私はリンク可能なコードが必要なリサーチプロジェクトに取り組んでいます。実行時の例外があります – Pansy

答えて

5

許を持っていますならば、私は気にしない&リンク可能であることを、コードを必要とする研究プロジェクトに取り組んでいますか?それは意味をなさない。 であり、無視することはできません。リンカがその作業を行えないときは、実行可能ファイルをビルドすることはできません。あなたは単にそれを実装し、それがうまくいくことを願っていますか?

代わりに、プロジェクトを正しく構築して構築する方法を学ぶ必要があります。外部ライブラリに依存している場合は、リンカーの検索パスにパスを追加する必要があります。

EDIT:あなたのコメントパー...

は、ここで私は研究プロジェクトに取り組んでいますsourceware.org/binutils/docs/ld/Options.htmlのようなリンケージ・エラーを抑制するためのオプションがありますリンク可能なコードが必要な場所&ランタイム例外があるかどうか気にしない

まあ、それでも意味がありません。より慎重にそのセクションを読む:リンク時に指定した共有ライブラリは1と同じではないかもしれない

:リンク時に指定共有ライブラリに未定義のシンボル参照を可能にするための

の理由があることですロード時に使用できるので、シンボルは実際にロード時に解決可能である可能性があります。 BeOSやHPPAなど、共有ライブラリの未定義シンボルが正常なオペレーティングシステムがいくつかあります。あなたが実際ににリンクされる動的ライブラリの同じバージョンにリンクされていない可能性があるため

共有ライブラリに未定義のシンボルを許可する前記ので、いくつかの事情があるが合理的です。

しかし、共有ライブラリではなく実行可能ファイルをビルドしたいので、は意味がありません。あなたが求めているのはです。 borkedで動作しない実行可能ファイルがあるだけです。何故そんなにコンパイラがそのような条件を許すのでしょうか?

+0

ここではリンクのエラーを抑制するオプションがありますhttp://sourceware.org/binutils/docs/ld/Options.html 私は取り組んでいます私がリンク可能なコードが必要なリサーチプロジェクト&ランタイム例外があるかどうか気にしない – Pansy

+0

@Pansy:自分のレスポンスを編集しましたが、それはあなたの後ろではありません。 –

+0

リンクされたドキュメントはGNU ld用であり、OS Xには適用されませんが、GNU ldは実際には、 - unresolved-symbols = ignore-allを使用して未解決のシンボルを含む実行可能ファイルを生成することができます。それはよく定義されているという意味で "合理的"ですが、それは賢明なことではありません。なぜそんなにコンパイラーがこれを許していますか?コンパイラが判断を下すのは仕事ではありません。 – Praxeolitic

1

代わりにld -r -o Proj.o $(wildcard *.o)を使用できます。
実行できる実行可能ファイルではなく、実行可能ファイルにリンクできるオブジェクトファイルです。その最後のリンケージでは、未解決のシンボルを提供する必要があります。

0

おそらく、exeではなくライブラリを作成することをお勧めします。これらはリンカエラーを生成すべきではありません。

ar r libProj.a $(wildcard *.o) 
ranlib libProj.a 
関連する問題