138

特定のiPhone静的ライブラリがARMまたはIntel用に構築されているかどうかを確認することに興味があります。

それは何よりも好奇心です。これを行うためのMacOSXまたはBSD固有のツールはありますか?この投稿はLinuxでの例を示しています。

4

6 に答える 6

264

別のオプションはlipo; otoolその出力は簡潔で、 'よりも読みやすくなっています。

例:

% lipo -info /usr/lib/libiodbc.a 
Architectures in the fat file: /usr/lib/libiodbc.a are: x86_64 i386 ppc
% lipo -info libnonfatarchive.a
input file libnonfatarchive.a is not a fat file
Non-fat file: libnonfatarchive.a is architecture: i386
%
于 2010-04-14T10:20:37.220 に答える
71

fileおそらく教えてくれるでしょう。otool確かにできるはずです。しかし、私はfile最初に試してみます、例えば

logan:/Users/logan% file d2
d2: Mach-O executable ppc

アーカイブの例:

logan:/Users/logan% file /usr/lib/libMallocDebug.a
/usr/lib/libMallocDebug.a: Mach-O universal binary with 2 architectures
/usr/lib/libMallocDebug.a (for architecture i386):      current ar archive random library
/usr/lib/libMallocDebug.a (for architecture ppc):       current ar archive
于 2009-07-06T02:23:44.857 に答える
55

前述のように、file常に機能するとは限りません。otool -hv -arch allおそらく、動作が保証されている最も近いものです。これは、ライブラリ内のすべてのオブジェクトファイルのアーキテクチャ情報を提供します。

例:

%otool -hv /sw/lib/libfftw3.a
アーカイブ:/sw/lib/libfftw3.a
/sw/lib/libfftw3.a(align.o):
マッハヘッダー
      magic cputype cpusubtype caps filetypencmdssizeofcmdsフラグ
MH_MAGIC_64 X86_64 ALL 0x00 OBJECT 3 336 SUBSECTIONS_VIA_SYMBOLS
/sw/lib/libfftw3.a(alloc.o):
マッハヘッダー
      magic cputype cpusubtype caps filetypencmdssizeofcmdsフラグ
MH_MAGIC_64 X86_64 ALL 0x00 OBJECT 3 416 SUBSECTIONS_VIA_SYMBOLS
..。
于 2010-01-04T16:45:59.510 に答える
6

このbashスクリプトは、アーキテクチャのリストをプログラムで変数に取り込むのに役立ちます。

list_archs.sh:

#! /bin/bash
lipo -info $1 | sed -En -e 's/^(Non-|Architectures in the )fat file: .+( is architecture| are): (.*)$/\3/p'

使用例:

./list_archs.sh /usr/lib/libc.dylib
x86_64 i386
于 2017-02-07T22:04:20.220 に答える
4

別の方法として、私はobjdumpうまくいくことがわかった。例として、私の環境では、vxWorksを使用してライブラリアーカイブを構築し、それらを他のプロジェクトにリンクする必要があります。アーカイブが正しいアーキテクチャであるかどうかをテストするために、次のようなことを行うことができます(bash構文)。

if [ "$(objdumpsparc -a ${ARCHIVE_FILE} 2>&1 | ggrep -cvP 'elf32-sparc-vxworks')" -ne "0" ]; then
  echo "Cannot build with ${ARCHIVE_FILE}, it contains one or more non-sparc components"
fi;

elf32-sparc-vxworksと書かれていない行が表示されるため、この例は正確には正しくありませんが、これを適応させるのは簡単です。

これの優れた利点の1つはobjdump、または同様の名前のバリアントがほとんどの* nixオペレーティングシステムにインストールされているのに対し、他の応答で提案されているツールはインストールされていないことです。

編集OPがOSXで要求していたのは私に思い浮かびました。謝罪いたします。

于 2011-08-05T16:53:28.303 に答える
4

ライブラリ(またはその中のオブジェクトファイル)がMac Catalyst用であるかどうかを判断する方法についての回答を探してここに来る人がいる場合はotool -l、ロードコマンドをダンプするために使用します。任意のオブジェクトのLC_BUILD_VERSIONセクションを見つけます。Mac Catalystは、platform 6ではなくで識別されplatform 1ます。

于 2020-12-28T03:09:06.523 に答える