4

私はCで非常に単純なプログラムhelloを作成します。exeファイルでldを使用すると、これが返されます

ld: error in hello(.eh_frame); no .eh_frame_hdr table will be created.

私はLD_LIBRAY_PATHls/etc/ld.so.confと戻り値で同じことを試しました:

ld: error in /bin/ls(.eh_frame); no .eh_frame_hdr table will be created.
ld: warning: cannot find entry symbol _start; defaulting to 0000000000402920

何が起こっていますか?私は Debian を使用しており、私の GCC バージョンは (Debian 4.7.2-5 ) です。

4

2 に答える 2

8

あなたが使用しようとしていたユーティリティは、ld ではなく ldd (LDD) だったと思います。

ldd は、exe が使用するすべての共有リンク ライブラリを表示します。または、少なくとも、コンパイル時にリンクされています。

于 2013-12-02T21:53:57.747 に答える
5

ld の機能を理解していないと思います。ld は、「オブジェクト ファイル」 (コンパイルされているがリンクされていないコードで、通常は .o ファイルに格納されているコード) とライブラリ (単一の .a または .so ファイルに収集されたオブジェクト ファイルのセット) を取得し、それらを結合して実行可能ファイルを生成します。オペレーティング システムを実行できます。

引数を 1 つ指定して ld を呼び出すと、ld はその引数がオブジェクト ファイルであると想定します。あなたの場合、既にリンクされている実行可能ファイルである「hello」と「/bin/ls」で使用しているため、(確かに紛らわしい) エラーメッセージが生成されます。

あなたの混乱は、ソースを gcc でコンパイルすると、それを標準ライブラリにリンクし、実行しないように特に指示しない限り、実行可能ファイル (「hello」など) を生成するという事実に起因すると思われます。個別のリンク手順は必要ありません。

参考までに、gcc のマニュアル ページld のマニュアルページを次に示します。

于 2013-10-23T18:39:25.077 に答える