armv7a Cortex-A9 CPU でコンパイルされた ELF があります。問題なく正常に動作しますが、armv7a Cortex-A8 CPU に移動すると、ファイルは次のようにサイレントに終了します。
casey@arm:~/Unreal/System$ ./UCCLinux.bin.orig casey@arm:~/Unreal/System$
Cortex A9 CPU から変更されていない共有オブジェクトを使用する独自の UCCLinux.bin を作成しましたが、実行は正常に機能します。これにより、共有オブジェクトには何も問題はなく、ELF 自体に問題があると思います。ただし、 ld --verbose/readelf を比較すると、小さな違いが 1 つだけ示されます。私がビルドしたバージョンでは、別の依存関係が必要です。ld-linux-armhf.so.3 は存在せず、libm.so.6 に置き換えられます。私が持っているもの。
私を混乱させる作業システム上のこの検索パスもあります: SEARCH_DIR("/usr/armv7hl-suse-linux-gnueabi/lib") armv7* h *l, with no hf on gnueabi. どちらもハードフロートであるため、これがUbuntu上のSuSEビルドに何かを意味するかどうかはわかりません。それは単なるセマンティクスかもしれません。
両方のシステムの ldd 出力は元のファイルと一致します。その依存関係の変更と、おそらくさまざまなディストリビューションのさまざまなコンパイラからの比較的マイナーなコメントを除いて、私は完全に途方に暮れています。
私が作成したファイルと私に与えられたファイルからの strace 出力があります。
良い: http://pastebin.com/ef8Svn1Q
悪い: http://pastebin.com/04fyP5xt
私が試した他のすべての小さなテストプログラムは問題なく動作するため、なぜこれが起こるのか完全に途方に暮れています。なぜかこのファイルだけです。mtune=cortex-a8 でコンパイルしても何も変わりませんでした。「ちなみに、実行するには独自のバイナリをコンパイルする必要があります。さらに、これによって発生する可能性のある根本的な問題がいくつかあると思います。
{私の知る限りでは} 関連するコンパイラ オプション:
-march=armv7-a -mtune=cortex-a9 -mfloat-abi=hard -mfpu=vfpv3-d16
FPU は両方の cpu に一致し、両方とも hardfloat armv7a です。
何か案は?
編集: Valgrind でいくつかの新しい情報が見つかりました。
-1929-- /home/casey/Unreal/System/UCCLinux.bin.orig (0x8000) からの syms の読み取り --1929-- /lib/arm-linux-gnueabi/ld-2.15.so (0x4000000) からの syms の読み取り - -1929-- /lib/arm-linux-gnueabi/ld-2.15.so を考慮する .. --1929-- .. CRC の不一致 (計算された c6793f6a は 66aab705 が必要) --1929-- オブジェクトにシンボル テーブルがありません
valgrind: 起動時の致命的なエラー: 関数のリダイレクト valgrind: これは、このプラットフォームとツールの組み合わせに必須です valgrind: を設定できません。リダイレクトの詳細は次のとおりです。 valgrind: リダイレクトする必要がある関数 valgrind: その名前は次のパターンに一致します: memcpy valgrind: soname が一致するオブジェクト内: ld-linux.so.3 valgrind: valgrind の処理中に見つかりませんでした: シンボルsoname を持つオブジェクトから: ld-linux.so.3
私のディストリビューションには、相互に排他的だと思っていたにもかかわらず、hardfloat ライブラリと softfloat ライブラリの両方があります。