Amazon Developer

as

Settings
Sign out
Notifications
Alexa
Amazonアプリストア
Ring
AWS
ドキュメント
Support
Contact Us
My Cases
開発
設計と開発
公開
リファレンス
サポート
メインコンテンツへスキップ
このページでは、ネイティブコードを含むVegaアプリをビルドして実行する場合に発生する可能性のある、リンカー名前空間に関する一般的な問題の解決策を示します。それぞれの問題には、エラーメッセージ、原因、詳細な解決手順が含まれています。

ビルドが「library found in package」というエラーで失敗する

エラーメッセージ:
原因: Vega OSの公開ABIリストにあるシステムライブラリがパッケージにバンドルされています。これらのライブラリは、バンドルするのではなく動的にリンクする必要があります。 解決策:
  1. バンドルされているライブラリをパッケージから削除します。
  2. ビルド構成を更新して動的にリンクします。
  3. パッケージを再ビルドします。
  4. ライブラリがバンドルされていないことを確認します。

ランタイムエラー:「cannot open shared object file」

エラーメッセージ:
原因: アプリが、パッケージにバンドルされていないサードパーティライブラリに依存しています。 解決策:
  1. ライブラリがVega OS公開ABIリストに含まれていないことを確認します。
  2. ライブラリをパッケージにバンドルします。
  3. パッケージを再ビルドし、再インストールします。

実行時にシンボル解決が失敗する

エラーメッセージ:
原因: アプリが、明示的な依存関係ではなくアンビエントシンボルに依存しています。 解決策:
  1. 解決されないシンボルがどのライブラリから提供されているかを特定します。
  2. DT_NEEDEDまたはdlopen()を使用して、明示的な依存関係を追加します。
  3. パッケージを再ビルドします。

ライブラリが間違った名前空間から読み込まれる

症状: ライブラリが正常に読み込まれているように見えても、ライブラリ関数を呼び出すと、アプリのクラッシュや予期しない動作が発生します。 原因: 動的リンカーにより、想定とは異なるバージョンのライブラリが読み込まれました。これは通常、次の原因で発生します。
  • dlopen()で完全修飾パスが使用された。
  • ライブラリ名が公開ABIリストに含まれているものと一致する。
解決策:
  1. dlopen()呼び出しで、非修飾のライブラリ名を使用します。
  2. 公開ABIの競合をチェックします。 ライブラリが公開ABIリストに含まれていないことを確認します。含まれている場合は、常にシステムバージョンが読み込まれます。
  3. 実際のデバイスでテストして、ライブラリが正しく読み込まれることを確認します。

ABI検証は成功するが実行時に失敗する

症状: パッケージはビルド時のABI検証に合格しますが、アプリは実行時にリンカーエラーで失敗します。 原因: ビルド時の検証では、実行時のシナリオをすべて捕捉できるわけではありません。特に、次のようなシナリオは検出できません。
  • 実行時に構築される動的なdlopenのパス
  • アンビエントシンボルの依存関係
  • 実行時の状態に基づく条件付きのライブラリ読み込み
解決策:
  1. コード内で、動的にパスを構築しているdlopen()呼び出しをすべて削除します。
  2. 非修飾のライブラリ名を使用していることを確認します。
  3. 物理デバイスで十分にテストします。
  4. デバイスログにリンカーエラーがないかどうかを確認します。

DT_NEEDEDエントリが見つからない

症状: アプリは正常にビルドされますが、実行時にシンボルが見つからないというエラーで失敗します。 原因: ビルド構成でライブラリの依存関係が正しく宣言されていないため、リンカーによるDT_NEEDEDエントリの追加が行われていません。 解決策:
  1. 現在のDT_NEEDEDエントリを確認します。
  2. 不足している依存関係をビルド構成に追加します。
  3. 再ビルドし、DT_NEEDEDエントリが存在することを確認します。

ライブラリバージョンが競合する

症状: アプリはVega仮想デバイスでは動作しますが、物理デバイスでは動作しません。または、その逆の状態になります。 原因: バンドルされているライブラリとシステムライブラリ、または仮想デバイス環境と物理デバイス環境の間でライブラリバージョンが異なっています。 解決策:
  1. パッケージにバンドルされているライブラリを確認します。
  2. 動的にリンクする必要のあるライブラリがないかどうかを確認します。
    • バンドルされているライブラリを公開ABIリストと比較します。
    • 一致するものをすべて削除し、動的にリンクします。
  3. 仮想デバイスと物理デバイスの両方でテストして、一貫性を確認します。

関連トピック


最終更新日 2026年10月26日