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? In my opinion preprocessor directive #if should be used, otherwise we will receive unresolved reference on any platform. Maybe I missed something? because this code appears frequently for example: 1. utils.c : ff_yuv2rgb_init_tables_ppc 2. swscale_unscaled.c : ff_get_unscaled_swscale_ppc, ff_get_unscaled_swscale_arm, ff_get_unscaled_swscale_aarch64 3. cpu.c : ff_get_cpu_max_align_x86, ff_get_cpu_max_align_mips 4. float_dsp.c : ff_float_dsp_init_aarch64, ff_float_dsp_init_ppc, ff_float_dsp_init_x86 5. etc. _______________________________________________ ffmpeg-user mailing list ffmpeg-user@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-user To unsubscribe, visit link above, or email ffmpeg-user-requ...@ffmpeg.org with subject "unsubscribe".