ビルドが「library found in package」というエラーで失敗する
エラーメッセージ:- バンドルされているライブラリをパッケージから削除します。
-
ビルド構成を更新して動的にリンクします。
-
パッケージを再ビルドします。
-
ライブラリがバンドルされていないことを確認します。
ランタイムエラー:「cannot open shared object file」
エラーメッセージ:- ライブラリがVega OS公開ABIリストに含まれていないことを確認します。
-
ライブラリをパッケージにバンドルします。
-
パッケージを再ビルドし、再インストールします。
実行時にシンボル解決が失敗する
エラーメッセージ:-
解決されないシンボルがどのライブラリから提供されているかを特定します。
-
DT_NEEDEDまたはdlopen()を使用して、明示的な依存関係を追加します。 -
パッケージを再ビルドします。
ライブラリが間違った名前空間から読み込まれる
症状: ライブラリが正常に読み込まれているように見えても、ライブラリ関数を呼び出すと、アプリのクラッシュや予期しない動作が発生します。 原因: 動的リンカーにより、想定とは異なるバージョンのライブラリが読み込まれました。これは通常、次の原因で発生します。dlopen()で完全修飾パスが使用された。- ライブラリ名が公開ABIリストに含まれているものと一致する。
-
dlopen()呼び出しで、非修飾のライブラリ名を使用します。 - 公開ABIの競合をチェックします。 ライブラリが公開ABIリストに含まれていないことを確認します。含まれている場合は、常にシステムバージョンが読み込まれます。
-
実際のデバイスでテストして、ライブラリが正しく読み込まれることを確認します。
ABI検証は成功するが実行時に失敗する
症状: パッケージはビルド時のABI検証に合格しますが、アプリは実行時にリンカーエラーで失敗します。 原因: ビルド時の検証では、実行時のシナリオをすべて捕捉できるわけではありません。特に、次のようなシナリオは検出できません。- 実行時に構築される動的な
dlopenのパス - アンビエントシンボルの依存関係
- 実行時の状態に基づく条件付きのライブラリ読み込み
-
コード内で、動的にパスを構築している
dlopen()呼び出しをすべて削除します。 - 非修飾のライブラリ名を使用していることを確認します。
- 物理デバイスで十分にテストします。
-
デバイスログにリンカーエラーがないかどうかを確認します。
DT_NEEDEDエントリが見つからない
症状: アプリは正常にビルドされますが、実行時にシンボルが見つからないというエラーで失敗します。 原因: ビルド構成でライブラリの依存関係が正しく宣言されていないため、リンカーによるDT_NEEDEDエントリの追加が行われていません。
解決策:
-
現在の
DT_NEEDEDエントリを確認します。 -
不足している依存関係をビルド構成に追加します。
-
再ビルドし、
DT_NEEDEDエントリが存在することを確認します。
ライブラリバージョンが競合する
症状: アプリはVega仮想デバイスでは動作しますが、物理デバイスでは動作しません。または、その逆の状態になります。 原因: バンドルされているライブラリとシステムライブラリ、または仮想デバイス環境と物理デバイス環境の間でライブラリバージョンが異なっています。 解決策:-
パッケージにバンドルされているライブラリを確認します。
-
動的にリンクする必要のあるライブラリがないかどうかを確認します。
- バンドルされているライブラリを公開ABIリストと比較します。
- 一致するものをすべて削除し、動的にリンクします。
- 仮想デバイスと物理デバイスの両方でテストして、一貫性を確認します。

