ダイナミックローダーを使用しない実行可能ファイル(ELFファイル)をコンパイルしようとしています。 Linuxからmipsをコンパイルして、作成したシミュレーターで使用できるクロスコンパイラーを作成しました。私のhello.cppファイル(hello worldプログラム)のコンパイル時にフラグ-static-libgccをアサートしました。どうやらこれは十分ではありません。ダイナミックローダーの名前/パスを含むセグメントが実行可能ファイルにまだあるからです。実行する必要があるすべてのものを含む実行可能ファイルを生成するには、どのフラグを使用しますか?クロスコンパイラを再構築する必要がありますか?
-static
フラグを使用してみますか?
-static -static-libgcc -static-libstdc++
これらの3つのフラグを使用して、すべての依存関係の静的バージョン(gccを想定)に対してリンクします。特定の状況では、3つすべてのフラグが必ずしも必要ではないことに注意してください。ただし、これらのフラグも「痛まない」わけではありません。したがって、3つすべてをオンにします。
動的リンクが実際にないことを確認してください
ldd yourexecutable
「動的実行可能ファイルではない」または同等のものを返す必要があります。
未解決のシンボルが残っていないことを確認してください
nm yourexecutable | grep " U "
リストは空であるか、次のような特別なカーネルスペースシンボルのみが含まれている必要があります
U __tls_get_addr
最後に、実際に実行可能ファイルを実行できるかどうかを確認します