オブジェクトファイルのSDK、Deployment Targetを確認する


OS X、iOS、watchOS、tvOSなどのライブラリのSDKやDeployment Targetはotoolを使って確認できる。

otoolコマンド

$ man otool
...
       -l     Display the load commands.
...

今回確認するロードコマンド

  1. OS X
    • cmd LC_VERSION_MIN_MACOSX
  2. iOS
    • cmd LC_VERSION_MIN_IOS
  3. watchOS
    • cmd LC_VERSION_MIN_WATCHOS
  4. tvOS
    • cmd LC_VERSION_MIN_TVOS

サンプル 1

下記の例では、MacOSX10.11.sdk、Deployment Targetが10.11で作成されたバイナリであることがわかる。

$ otool -l `which ls`
...
Load command 9
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.11
      sdk 10.11
...
  • version: Deployment Target
  • sdk: SDK

サンプル 2

以前に作成したiOS Deployment Targetが5.0のライブラリをXcode 7.3でコンパイルしたとき、以下の警告が表示された。

ld: warning: object file (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.3.0/lib/darwin/libclang_rt.ios.a(chkstk.S.o)) was built for newer iOS version (6.0) than being linked (5.0)

そこでlibclang_rt.ios.aのDeployment Targetを確認した。

$ otool -l /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.3.0/lib/darwin/libclang_rt.ios.a
...
Load command 1
      cmd LC_VERSION_MIN_IPHONEOS
  cmdsize 16
  version 6.0
      sdk n/a
...

するとオブジェクトファイルの個数分、ロードコマンドが表示されるが、いずれもiOS Deployment Targetが6.0であることがわかる。