ホームページ  >  記事  >  バックエンド開発  >  ffmpeg でコンパイルすると再配置エラーが発生するのはなぜですか?どうすれば修正できますか?

ffmpeg でコンパイルすると再配置エラーが発生するのはなぜですか?どうすれば修正できますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-08 04:21:01415ブラウズ

Why do I get a relocation error when compiling with ffmpeg and how can I fix it?

共有ライブラリの互換性のために -fPIC を使用して再コンパイルする

ライブラリを使用してプログラムをコンパイルする場合、ライブラリの種類とコンパイルの互換性を確保することが重要ですフラグ。このようなシナリオの 1 つは、ARM Ubuntu マシンを使用して ffmpeg を再インストールするときに発生します。 ffmpeg ライブラリを利用するプログラムをコンパイルすると、次のエラーが発生する場合があります:

/usr/bin/ld: /usr/local/lib/libavcodec.a(amrnbdec.o): relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavcodec.a: could not read symbols: Bad value
collect2: ld returned 1 exit status

このエラーは、ライブラリのタイプとコンパイル フラグの不一致を示します。 -fPIC フラグは通常、共有ライブラリ (.so) に含まれるコードをコンパイルするときに使用されます。ただし、デフォルトでは、ffmpeg は静的ライブラリ (.a) にコンパイルされることがよくあります。

この問題を解決するには、-fPIC フラグを指定して ffmpeg を再コンパイルする必要があります。これは、ffmpeg を構成するときにコンパイル オプションを変更することで実現できます。これを行うには、./configure オプションに「--enable-shared」を追加します。あるいは、代わりに「--disable-shared」を追加して、共有ライブラリを完全に無効にすることもできます。

この変更を行うと、ffmpeg を再コンパイルすると、静的ライブラリ (.a) ではなく共有ライブラリ (.so) が生成されます。 )。 ffmpeg ライブラリを使用するプログラムをコンパイルすると、共有ライブラリと正常にリンクできるようになり、再配置エラーが解決されます。

以上がffmpeg でコンパイルすると再配置エラーが発生するのはなぜですか?どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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