サイトアイコン Embarcadero RAD Studio, Delphi, & C++Builder Blogs

RAD Studio 10.3.3向けのAndroidセンサーコンポーネントを使用したリンカーエラー

SDKバージョン26で導入されたシンボルを参照するAndroidapi.Sensor.pasの問題により、アプリケーションがSDKバージョン22を参照するときにリンクエラーが発生します。

C++Builder 10.3.3を利用してAndroidアプリケーションを構築している場合、エラー[ldandroid Error] “ld”がコード1で終了する場合があります。
Delphiでシンボル名(例えば、スクリプトを使って、Grijjy社のブログ記事に掲載のエラー報告コードのような、Androidのサードパーティのコールスタックライブラリによって生成されたコールスタックからシンボルを取得する)を一致させようとすると、Delphi 10.3.3では同じ問題が原因で異なる症状が発生し、リンカエラーも発生します。

この問題は、Androidapi.Sensor.pasファイルのいくつかのシンボルがAndroid SDKバージョン26でのみ導入されているために発生しますが、アプリケーションはこれらのシンボルが存在しないバージョン22にリンクされます。エラーを解決するには、ユニットのローカルコピーを作成し、シンボルをコメントアウトしてください。

回避策

  1. C:\Program Files(x86)\Embarcadero\Studio\20.0\source\rtl\android\でAndroidapi.Sensor.pasおよびAndroidapi.incファイルを探します(別の場所にインストールした場合は、同名のファイルを探します) 。
  2. Androidapi.Sensor.pasとAndroidapi.incをプロジェクトのソースフォルダにコピーし、Androidapi.Sensor.pasのみをプロジェクトに追加します。 Androidapi.incは、コピーしたAndroidapi.Sensor.pasをビルドするために必要です。
  3. Androidapi.Sensor.pasファイルを開き、次のシンボルの宣言を見つけてコメントアウトします。
    • ASensorManager_getInstanceForPackage
    • ASensorManager_getDefaultSensorEx
    • ASensorManager_createSharedMemoryDirectChannel
    • ASensorManager_createHardwareBufferDirectChannel
    • ASensorManager_destroyDirectChannel
    • ASensorManager_configureDirectReport
    • ASensorEventQueue_registerSensor
    • ASensor_isDirectChannelTypeSupported
    • ASensor_getHighestDirectReportRateLevel
  4. 次のバージョン(例えば、10.4)にアップグレードするときに、Androidapi.Sensor.pasとAndroidapi.incファイルのローカルコピーをプロジェクトから削除してください。

お礼

Brian Long氏は親切にもこの問題とその回避策について長い記事を書いてくれた。ありがとう、Brian!

モバイルバージョンを終了