助けが必要です!! 動的リンクなしで、スタンドアロンの実行可能ファイルを構築しようとしています。
小さなテスト プログラムを作成し、test.o という名前の再配置可能なオブジェクト ファイルを生成しました。GNU リンカーを使用してスタンドアロンの実行可能ファイルをビルドしようとすると、次のエラーが発生します。
$ld -static -o test test.o /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/libc.a /usr/lib/gcc/i486-linux-gnu/4.4/libgcc .a /usr/lib/gcc/i486-linux-gnu/4.4/libgcc_eh.a /usr/lib/gcc/i486-linux-gnu/4.4/libgcc_eh.a(unwind-dw2-fde-glibc.o):関数_Unwind_Find_FDE':
(.text+0x190b): undefined reference to
内 dl_iterate_phdr'
未定義シンボル dl_iterate_phdrを解決する方法。このシンボルはどのアーカイブに存在しますか?
ありがとう!!!
EDIT1:
よくわからない場合に備えて、私の動機はスタンドアロンの実行可能ファイルを生成することです。つまり、メモリにロードされている間に完全に実行の準備ができている実行可能ファイルです。つまり、すべてのシンボルの解決と再配置は、動的リンカーではなくプログラムリンカー自体によって行われます。 . そのような実行可能ファイルを生成することは可能ですか?
最終更新:
これで、以下のコマンドを使用して ld に直接準拠できるようになりました。
$ld -static -o test /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.4.3/crtbeginT.o /usr/lib/gcc/ i486-linux-gnu/4.4.3/crtend.o test.o --start-group /usr/lib/gcc/i486-linux-gnu/4.4.3/libgcc.a /usr/lib/gcc/i486- linux-gnu/4.4.3/libgcc_eh.a /usr/lib/libc.a --end-group
man ld は言う --start-group archives --endgroup は循環参照を解決するために使用されます!! また、シンボル dl_iterate_phdr が libc.a で定義されていることもわかりました。
助けてくれてありがとう!!