3

コードを実行せずに、ライブラリがリトル エンディアンまたはビッグ エンディアン アーキテクチャ用にビルドされているかどうかを確認する方法はありますか?

たとえば、私はライブラリ X を持っていますが、それがリトル エンディアンまたはビッグ エンディアン用にビルドされているかどうか、ライブラリがビルドされているかどうかをビルド出力から確認する方法があるかどうかはわかりません。リトルエンディアンかビッグエンディアンか?または、この情報をライブラリに配置することは可能ですか?

4

2 に答える 2

10

Linux/Unix を実行している場合、最も簡単な方法は file コマンドを使用することです。

$ file /lib64/libc-2.15.so 
/lib64/libc-2.15.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), BuildID[sha1]=0x2dc710cc03932ca6fb7f223e2c0f67e21adebb4f, for GNU/Linux 2.6.32, not stripped

したがって、情報は確実にライブラリ ヘッダーに組み込まれます。readelf コマンドで確認できます。

$ readelf -h /lib64/libc-2.15.so
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 03 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - GNU
  ABI Version:                       0
  Type:                              DYN (Shared object file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x3fc4c21840
  Start of program headers:          64 (bytes into file)
  Start of section headers:          2062800 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         10
  Size of section headers:           64 (bytes)
  Number of section headers:         43
  Section header string table index: 42

Windowsでは、確認方法がわかりませんが、dllのヘッダーにあるはずです。

于 2013-01-30T05:26:22.563 に答える
1

リトル エンディアンまたはビッグ エンディアンのコードを同じハードウェアで実行できる現存するマシンはほとんどないため、問題はほとんど重要ではありません。IIRC、ビッグエンディアンまたはリトルエンディアンを実行でき、必要に応じて実行時に切り替えることができるマシン(MIPS RISCマシン?)がいくつかありました。

ただし、ライブラリが x86/64 (リトル エンディアン アーキテクチャ) 用にコンパイルされている場合、SPARC または PPC (ビッグ エンディアン アーキテクチャ) では動作しませんが、問題はエンディアンではなく、異なるチップはまったく異なり、互換性がありません。

于 2013-01-30T05:29:18.030 に答える