Home >Backend Development >C++ >Why do I get a relocation error when compiling with ffmpeg and how can I fix it?

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

Barbara Streisand
Barbara StreisandOriginal
2024-11-08 04:21:01512browse

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

Recompiling with -fPIC for Shared Library Compatibility

When compiling programs using libraries, it's essential to ensure compatibility between the library type and the compilation flags. One such scenario occurs when using the ARM Ubuntu machine to reinstall ffmpeg. Compiling a program that utilizes the ffmpeg library might result in the following error:

/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

This error indicates a mismatch between the library type and the compilation flags. The -fPIC flag is typically used when compiling code that will be included in a shared library (.so). By default, however, ffmpeg is often compiled into a static library (.a).

To resolve this issue, you must recompile ffmpeg with the -fPIC flag. This can be accomplished by modifying the compilation options when configuring ffmpeg. To do so, add "--enable-shared" to the ./configure options. Alternatively, you can disable shared libraries altogether by adding "--disable-shared" instead.

Once this change is made, recompiling ffmpeg will produce a shared library (.so) instead of a static library (.a). When you compile your program that uses the ffmpeg library, it will be able to successfully link with the shared library, resolving the relocation error.

The above is the detailed content of Why do I get a relocation error when compiling with ffmpeg and how can I fix it?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn