[FFmpeg-devel] [PATCH 0/4] Fix FFmpeg compilation without DCE

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Wed Nov 2 03:08:20 EET 2022


L. E. Segovia:
> Hi all,
> 
> This is a patch to fix building FFmpeg without having DCE enabled.
> This was previously attempted by Andreas Rheinhardt in commit 
> 40e6575aa3eed64cd32bf28c00ae57edc5acb25a. However, this is not remotely
> enough for MSVC; one can quickly check for this by configuring the build
> without any optimizations, and then overriding OPTFLAGS with /Od:
> 

You seem to misunderstand the goal of
40e6575aa3eed64cd32bf28c00ae57edc5acb25a: It was not meant for
--disable-optimizations builds; it was instead meant for full LTO builds
(with optimizations enabled), where MSVC wanted to take a look at
arch-specific code that was not available although it was under a "if
(0)". Builds without asm or where components have been disabled (which
can easily lead to linking failures if your compiler does not perform
DCE) are not considered "full" builds in the preceding sentence.

(I actually do not even know whether it has achieved said aim.)

>   ../configure --disable-asm --disable-optimizations --optflags=-Od --enable-shared --disable-static --toolchain=msvc
> 
> Issuing make should yield the first of many LNK2019 errors:
> 
>   LD      libavformat/avformat-59.dll
>     Creating library libavformat/avformat.lib and object libavformat/avformat.exp
>   rtmpproto.o : error LNK2019: unresolved external symbol ff_rtmpe_gen_pub_key referenced in function rtmp_handshake
>   rtmpproto.o : error LNK2019: unresolved external symbol ff_rtmpe_compute_secret_key referenced in function rtmp_handshake
>   rtmpproto.o : error LNK2019: unresolved external symbol ff_rtmpe_encrypt_sig referenced in function rtmp_handshake
>   rtmpproto.o : error LNK2019: unresolved external symbol ff_rtmpe_update_keystream referenced in function rtmp_handshake
>   libavformat\avformat-59.dll : fatal error LNK1120: 4 unresolved externals
>   make: *** [/c/Users/Amalia/Desktop/ffmpeg/ffbuild/library.mak:119: libavformat/avformat-59.dll] Error 96
> 
> The proposed patchset comprehensively converts all instances of ARCH_FOO, 
> CONFIG_FOO, INLINE_FOO and EXTERNAL_FOO to the equivalent preprocessor
> guards.
> 

You are not converting all of them; you seem to only convert those that
caused linker errors in your build (which is fine by me). E.g.
mpegvideo_enc.c is full of CONFIG checks that would lead to linker
errors in case DCE is disabled if some of the components whose existence
is checked are actually disabled.

> L. E. Segovia (4):
>   all: Replace if (ARCH_FOO) checks by #if ARCH_FOO, part 2
>   all: Replace if (CONFIG_FOO) checks by #if CONFIG_FOO
>   all: Guard if (INLINE*) checks with #if HAVE_INLINE_ASM
>   all: Guard if (EXTERNAL*) checks with #if HAVE_X86ASM
> 
>  fftools/ffprobe.c                          |  22 +-
>  fftools/opt_common.c                       |  18 +-
>  libavcodec/x86/aacencdsp_init.c            |   2 +
>  libavcodec/x86/aacpsdsp_init.c             |   2 +
>  libavcodec/x86/ac3dsp_init.c               |   4 +
>  libavcodec/x86/audiodsp_init.c             |   2 +
>  libavcodec/x86/bswapdsp_init.c             |   2 +
>  libavcodec/x86/cavsdsp.c                   |   2 +
>  libavcodec/x86/celt_pvq_init.c             |   2 +
>  libavcodec/x86/cfhddsp_init.c              |   2 +
>  libavcodec/x86/cfhdencdsp_init.c           |   2 +
>  libavcodec/x86/dcadsp_init.c               |   4 +
>  libavcodec/x86/dct_init.c                  |   2 +
>  libavcodec/x86/dnxhdenc_init.c             |   2 +
>  libavcodec/x86/exrdsp_init.c               |   2 +
>  libavcodec/x86/fdctdsp_init.c              |   2 +
>  libavcodec/x86/fft_init.c                  |   2 +
>  libavcodec/x86/flacdsp_init.c              |   8 +-
>  libavcodec/x86/g722dsp_init.c              |   2 +
>  libavcodec/x86/h263dsp_init.c              |   2 +
>  libavcodec/x86/h264_intrapred_init.c       |   2 +
>  libavcodec/x86/h264chroma_init.c           |   2 +
>  libavcodec/x86/hevcdsp_init.c              | 465 +++++++++++----------
>  libavcodec/x86/hpeldsp_init.c              |   2 +
>  libavcodec/x86/hpeldsp_vp3_init.c          |   2 +
>  libavcodec/x86/huffyuvdsp_init.c           |   2 +
>  libavcodec/x86/huffyuvencdsp_init.c        |   2 +
>  libavcodec/x86/idctdsp_init.c              |  11 +-
>  libavcodec/x86/jpeg2000dsp_init.c          |   2 +
>  libavcodec/x86/lossless_videodsp_init.c    |   2 +
>  libavcodec/x86/lossless_videoencdsp_init.c |   2 +
>  libavcodec/x86/mdct15_init.c               |   2 +
>  libavcodec/x86/me_cmp_init.c               |   2 +
>  libavcodec/x86/mlpdsp_init.c               |   8 +-
>  libavcodec/x86/mpegvideoencdsp_init.c      |   2 +
>  libavcodec/x86/opusdsp_init.c              |   2 +
>  libavcodec/x86/pixblockdsp_init.c          |   2 +
>  libavcodec/x86/pngdsp_init.c               |   2 +
>  libavcodec/x86/proresdsp_init.c            |   2 +
>  libavcodec/x86/rv34dsp_init.c              |   2 +
>  libavcodec/x86/sbcdsp_init.c               |   2 +
>  libavcodec/x86/sbrdsp_init.c               |   2 +
>  libavcodec/x86/svq1enc_init.c              |   2 +
>  libavcodec/x86/utvideodsp_init.c           |   2 +
>  libavcodec/x86/v210enc_init.c              |   2 +
>  libavcodec/x86/vc1dsp_init.c               |   6 +-
>  libavcodec/x86/vorbisdsp_init.c            |   2 +
>  libavcodec/x86/vp3dsp_init.c               |   2 +
>  libavcodec/x86/vp6dsp_init.c               |   2 +
>  libavfilter/x86/af_afir_init.c             |   2 +
>  libavfilter/x86/af_anlmdn_init.c           |   2 +
>  libavfilter/x86/af_volume_init.c           |   2 +
>  libavfilter/x86/avf_showcqt_init.c         |   2 +
>  libavfilter/x86/colorspacedsp_init.c       |   6 +-
>  libavfilter/x86/vf_atadenoise_init.c       |   8 +-
>  libavfilter/x86/vf_blend_init.c            |   2 +
>  libavfilter/x86/vf_bwdif_init.c            |   2 +
>  libavfilter/x86/vf_convolution_init.c      |   2 +
>  libavfilter/x86/vf_framerate_init.c        |   2 +
>  libavfilter/x86/vf_fspp_init.c             |   2 +
>  libavfilter/x86/vf_gblur_init.c            |   2 +
>  libavfilter/x86/vf_hflip_init.c            |   2 +
>  libavfilter/x86/vf_limiter_init.c          |   2 +
>  libavfilter/x86/vf_maskedclamp_init.c      |   2 +
>  libavfilter/x86/vf_maskedmerge_init.c      |   2 +
>  libavfilter/x86/vf_overlay_init.c          |   2 +
>  libavfilter/x86/vf_pp7_init.c              |   2 +
>  libavfilter/x86/vf_psnr_init.c             |   2 +
>  libavfilter/x86/vf_removegrain_init.c      |   2 +
>  libavfilter/x86/vf_ssim_init.c             |   8 +-
>  libavfilter/x86/vf_stereo3d_init.c         |   2 +
>  libavfilter/x86/vf_threshold_init.c        |   2 +
>  libavfilter/x86/vf_tinterlace_init.c       |   2 +
>  libavfilter/x86/vf_transpose_init.c        |   2 +
>  libavfilter/x86/vf_v360_init.c             |   2 +
>  libavfilter/x86/vf_w3fdif_init.c           |   6 +-
>  libavfilter/x86/vf_yadif_init.c            |   2 +
>  libavformat/rtmpproto.c                    |  24 +-
>  libavutil/x86/fixed_dsp_init.c             |   2 +
>  libavutil/x86/float_dsp_init.c             |   2 +
>  libavutil/x86/imgutils_init.c              |   2 +
>  libavutil/x86/lls_init.c                   |   2 +
>  libavutil/x86/pixelutils_init.c            |   2 +
>  libswresample/x86/audio_convert_init.c     |   2 +
>  libswresample/x86/resample_init.c          |   6 +
>  libswscale/x86/rgb2rgb.c                   |   2 +
>  libswscale/x86/swscale.c                   |   2 +
>  87 files changed, 493 insertions(+), 255 deletions(-)
> 



More information about the ffmpeg-devel mailing list