ホームページ  >  記事  >  バックエンド開発  >  「共有オブジェクトの作成時に、「ローカル シンボル」に対する再配置 R_ARM_MOVW_ABS_NC は使用できません」というエラーが表示されるのはなぜですか?

「共有オブジェクトの作成時に、「ローカル シンボル」に対する再配置 R_ARM_MOVW_ABS_NC は使用できません」というエラーが表示されるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-08 07:00:02766ブラウズ

Why do I get the error

ARM Ubuntu マシンの -fPIC フラグを使用した再コンパイル

ARM Ubuntu マシンで FFmpeg をリビルドすると、次のエラーが発生する可能性があります:

relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC

このエラーは、システムが静的ライブラリを互換性のない動的ライブラリにリンクしようとしていることを示します。これを解決するには、FFmpeg などの問題のあるライブラリを -fPIC フラグを使用して再コンパイルする必要があります。

再コンパイル プロセス

次の手順を実行できます。 -fPIC フラグを使用してライブラリを再コンパイルします:

  1. ライブラリのソース コードを編集します: 再配置エラーの原因となっているライブラリのソース コード ファイルを見つけて開きます。
  2. -fPIC フラグを追加します: ソース コードで指定されたコンパイラ オプションに -fPIC フラグを追加します。このフラグは、動的リンクに適した位置非依存コード (PIC) を生成するようにコンパイラーに指示します。
  3. ライブラリを再コンパイルします: 更新されたコンパイラー オプションを使用してライブラリを再ビルドします。これは通常、make コマンドを使用して実行できます。
  4. 再コンパイルされたライブラリをインストールします: ライブラリが PIC で再コンパイルされたら、システムのライブラリ ディレクトリにインストールする必要があります。これにより、他のプログラムとリンクできるようになります。

FFmpeg の具体的な例

FFmpeg の場合、次のコマンドを使用して、 -fPIC フラグ:

./configure --enable-shared --disable-static
make

--enable-shared フラグを追加すると、静的ライブラリの代わりに共有ライブラリが生成されます。 --disable-static フラグは、静的ライブラリがビルドされないようにします。

これらのオプションを使用して FFmpeg を再構築した後、make install を使用して再コンパイルされたライブラリを適切なシステム ディレクトリにインストールできます。これにより、PIC 対応の FFmpeg ライブラリをリンクして他のプログラムで使用できるようになります。

以上が「共有オブジェクトの作成時に、「ローカル シンボル」に対する再配置 R_ARM_MOVW_ABS_NC は使用できません」というエラーが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。