【決定版】CMake: 変数「CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE」でMacアプリの共有ライブラリ使用状況を徹底分析
CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
は、CMake 3.13 以降で導入された変数です。この変数は、Xcode で生成されるスキームの "Diagnostics" セクションで、ダイナミックリンカー API 使用状況を表示するかどうかを制御します。
設定方法
この変数は、ターゲットを作成する際に設定できます。以下の例をご覧ください。
target_link_libraries(mytarget PRIVATE mylib)
set(CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE ON)
上記の例では、mytarget
ターゲットが mylib
ライブラリにリンクされ、CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
変数が ON
に設定されます。これにより、Xcode で mytarget
ターゲットをビルドおよび実行すると、"Diagnostics" セクションにダイナミックリンカー API 使用状況が表示されます。
動作
CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
変数が ON
に設定されている場合、Xcode で生成されるスキームの "Diagnostics" セクションには、以下の情報が表示されます。
- 各ダイナミックライブラリによって使用される API 関数の一覧
- ターゲットによって使用されるダイナミックライブラリの一覧
この情報は、デバッグやパフォーマンス分析に役立ちます。
- この変数は、Xcode で生成されるスキームにのみ影響を与えます。他のビルドシステムでは使用できません。
- この変数は、Xcode 3.13 以降でのみ使用できます。
- "Diagnostics" セクションは、Xcode のウィンドウ下部に表示される領域です。この領域には、ビルドおよび実行に関する情報が表示されます。
- ダイナミックリンカー API は、macOS および iOS で共有ライブラリをロードおよびアンロードするために使用される API です。
cmake_minimum_required(VERSION 3.13)
project(myproject)
set(CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE ON)
add_executable(mytarget mytarget.c)
target_link_libraries(mytarget mylib)
このコードを実行すると、以下のようになります。
myproject
という名前のプロジェクトが作成されます。mytarget
という名前の実行可能ファイルが作成されます。mytarget
実行可能ファイルは、mylib
ライブラリにリンクされます。- Xcode で
mytarget
ターゲットをビルドおよび実行すると、"Diagnostics" セクションにダイナミックリンカー API 使用状況が表示されます。
target_link_libraries(mytarget mylib)
:mytarget
実行可能ファイルをmylib
ライブラリにリンクします。add_executable(mytarget mytarget.c)
:mytarget.c
ファイルからmytarget
という名前の実行可能ファイルを作成します。set(CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE ON)
:CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
変数をON
に設定します。project(myproject)
:myproject
という名前のプロジェクトを作成します。cmake_minimum_required(VERSION 3.13)
: CMake バージョン 3.13 以降が必要であることを指定します。
mylib
ライブラリは、実際に存在するライブラリに置き換える必要があります。- このコードは、macOS または iOS でコンパイルする必要があります。
otool コマンドを使用する
otool
コマンドは、macOS および iOS で共有ライブラリに関する情報を表示するために使用できるコマンドラインツールです。このコマンドを使用して、ダイナミックリンカー API 使用状況を表示することもできます。
otool -v mytarget
上記の例では、mytarget
実行可能ファイルに関する情報が表示されます。この情報には、実行可能ファイルによって使用されるダイナミックライブラリの一覧と、各ダイナミックライブラリによって使用される API 関数の一覧が含まれます。
DYLD_PRINT_ADDR 環境変数を使用する
DYLD_PRINT_ADDR
環境変数は、共有ライブラリによってロードされたアドレスと、各アドレスでロードされた API 関数の名前を表示するために使用できます。この環境変数を設定するには、以下のコマンドを実行します。
DYLD_PRINT_ADDR=1 ./mytarget
上記の例では、mytarget
実行可能ファイルを実行し、DYLD_PRINT_ADDR
環境変数を 1
に設定します。これにより、実行可能ファイルによってロードされた共有ライブラリに関する情報が表示されます。
デバッガーを使用する
LLDB や GDB などのデバッガーを使用して、ダイナミックリンカー API 使用状況をデバッグすることもできます。これらのデバッガーには、共有ライブラリによってロードされたアドレスと、各アドレスでロードされた API 関数の名前を表示する機能があります。
静的リンクを使用する
ダイナミックリンカー API 使用状況を心配する場合は、静的リンクを使用して、実行可能ファイルに必要なすべてのライブラリを埋め込むことができます。これにより、実行可能ファイルのサイズが大きくなりますが、ダイナミックライブラリに依存しなくなるため、ダイナミックリンカー API 使用状況を心配する必要がなくなります。
CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE
変数は、Xcode で生成されるスキームの "Diagnostics" セクションにダイナミックリンカー API 使用状況を表示するための便利な方法ですが、上記のように、いくつかの代替方法もあります。どの方法を使用するかは、ニーズと好みによります。
- 静的リンクは、すべてのオペレーティングシステムで使用できます。
- デバッガーは、macOS、iOS、Linux、および Windows など、さまざまなオペレーティングシステムで使用できます。
otool
コマンドとDYLD_PRINT_ADDR
環境変数は、macOS および iOS でのみ使用できます。