[FFmpeg-devel] Weird cross platform support in ffmpeg

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Tue May 31 17:23:47 EEST 2022


Timo Rothenpieler:
> On 31.05.2022 12:03, Александр wrote:
>> I tried to build ffmpeg 4.4 library and link with it and I received
>> multiple unresolved references. I came across on unusual architecture in
>> ffmpeg for multiple platforms.The library has many places with code like
>> this:
>>
>> void foo()
>> {
>>      // DO SOMETHING
>>      if (ARCH_MIPS) // maybe #if ARCH_MIPS (...) #endif should be used
>> instead?
>>           foo_mips(...);
>>      if (ARCH_PPC)
>>          foo_ppc(c);
>>      if (ARCH_ARM)
>>           foo_arm(...);
>>      if (ARCH_AARCH64)
>>          foo_aarch64(...);
>> }
>>
>> This code leads to linker errors because there is no any stub methods for
>> other platforms. I observed root MakeFile, it optionally includes
>> platform
>> dependent code for each library (path like
>> $(LIB_SUBDIR)/$(ARCH)/MakeFile)
>> where each foo_<arch> is defined.
>>
>> So, how does it work?
> 
> It relies on Compiler-Optimizations, namely Dead-Code-Elimination.
> For that reason, FFmpeg does not support being built with -O0, since the
> compiler won't eliminate the dead code, leading to a whole bunch of dead
> references.
> 

Incorrect: Both GCC and Clang eliminate dead code at -O0 and FFmpeg can
be built with -O0 with both of them just fine.

> Hence, if you run into an issue like that, you need to look at your
> compiler and figure out what the hell it's trying to do.
> Or stop trying to build with -O0, which the build system should normally
> never allow you to do in the first place unless you force it.


More information about the ffmpeg-devel mailing list