[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