mpv-player / mpv

🎥 Command line video player
https://mpv.io
Other
28.16k stars 2.89k forks source link

MPV doesn't want to build statically #13436

Closed MajliTech closed 7 months ago

MajliTech commented 8 months ago

Important Information

Provide following Information: master (fd2c5ee21d8b5c4d28e8a8fa11d5125610a94810) Arch Linux, code from here

Reproduction steps

git clone https://github.com/mpv-player/mpv
cd mpv
 meson setup build --default-library static --prefer-static -D wayland=disabled -D gl=disabled -D vulkan=disabled -D lua=disabled -D
meson compile -C build

Expected behavior

The binary builds itself

Actual behavior

An error appears:

FAILED: mpv 
cc  -o mpv libmpv.a.p/audio_aframe.c.o libmpv.a.p/audio_chmap.c.o libmpv.a.p/audio_chmap_sel.c.o libmpv.a.p/audio_decode_ad_lavc.c.o libmpv.a.p/audio_decode_ad_spdif.c.o libmpv.a.p/audio_filter_af_drop.c.o libmpv.a.p/audio_filter_af_format.c.o libmpv.a.p/audio_filter_af_lavcac3enc.c.o libmpv.a.p/audio_filter_af_scaletempo.c.o libmpv.a.p/audio_filter_af_scaletempo2.c.o libmpv.a.p/audio_filter_af_scaletempo2_internals.c.o libmpv.a.p/audio_fmt-conversion.c.o libmpv.a.p/audio_format.c.o libmpv.a.p/audio_out_ao.c.o libmpv.a.p/audio_out_ao_lavc.c.o libmpv.a.p/audio_out_ao_null.c.o libmpv.a.p/audio_out_ao_pcm.c.o libmpv.a.p/audio_out_buffer.c.o libmpv.a.p/common_av_common.c.o libmpv.a.p/common_av_log.c.o libmpv.a.p/common_codecs.c.o libmpv.a.p/common_common.c.o libmpv.a.p/common_encode_lavc.c.o libmpv.a.p/common_msg.c.o libmpv.a.p/common_playlist.c.o libmpv.a.p/common_recorder.c.o libmpv.a.p/common_stats.c.o libmpv.a.p/common_tags.c.o libmpv.a.p/common_version.c.o libmpv.a.p/demux_codec_tags.c.o libmpv.a.p/demux_cue.c.o libmpv.a.p/demux_cache.c.o libmpv.a.p/demux_demux.c.o libmpv.a.p/demux_demux_cue.c.o libmpv.a.p/demux_demux_disc.c.o libmpv.a.p/demux_demux_edl.c.o libmpv.a.p/demux_demux_lavf.c.o libmpv.a.p/demux_demux_mf.c.o libmpv.a.p/demux_demux_mkv.c.o libmpv.a.p/demux_demux_mkv_timeline.c.o libmpv.a.p/demux_demux_null.c.o libmpv.a.p/demux_demux_playlist.c.o libmpv.a.p/demux_demux_raw.c.o libmpv.a.p/demux_demux_timeline.c.o libmpv.a.p/demux_ebml.c.o libmpv.a.p/demux_packet.c.o libmpv.a.p/demux_timeline.c.o libmpv.a.p/filters_f_async_queue.c.o libmpv.a.p/filters_f_autoconvert.c.o libmpv.a.p/filters_f_auto_filters.c.o libmpv.a.p/filters_f_decoder_wrapper.c.o libmpv.a.p/filters_f_demux_in.c.o libmpv.a.p/filters_f_hwtransfer.c.o libmpv.a.p/filters_f_lavfi.c.o libmpv.a.p/filters_f_output_chain.c.o libmpv.a.p/filters_f_swresample.c.o libmpv.a.p/filters_f_swscale.c.o libmpv.a.p/filters_f_utils.c.o libmpv.a.p/filters_filter.c.o libmpv.a.p/filters_frame.c.o libmpv.a.p/filters_user_filters.c.o libmpv.a.p/input_cmd.c.o libmpv.a.p/input_event.c.o libmpv.a.p/input_input.c.o libmpv.a.p/input_ipc.c.o libmpv.a.p/input_keycodes.c.o libmpv.a.p/misc_bstr.c.o libmpv.a.p/misc_charset_conv.c.o libmpv.a.p/misc_dispatch.c.o libmpv.a.p/misc_json.c.o libmpv.a.p/misc_language.c.o libmpv.a.p/misc_natural_sort.c.o libmpv.a.p/misc_node.c.o libmpv.a.p/misc_random.c.o libmpv.a.p/misc_rendezvous.c.o libmpv.a.p/misc_thread_pool.c.o libmpv.a.p/misc_thread_tools.c.o libmpv.a.p/options_m_config_core.c.o libmpv.a.p/options_m_config_frontend.c.o libmpv.a.p/options_m_option.c.o libmpv.a.p/options_m_property.c.o libmpv.a.p/options_options.c.o libmpv.a.p/options_parse_commandline.c.o libmpv.a.p/options_parse_configfile.c.o libmpv.a.p/options_path.c.o libmpv.a.p/player_audio.c.o libmpv.a.p/player_client.c.o libmpv.a.p/player_command.c.o libmpv.a.p/player_configfiles.c.o libmpv.a.p/player_external_files.c.o libmpv.a.p/player_loadfile.c.o libmpv.a.p/player_main.c.o libmpv.a.p/player_misc.c.o libmpv.a.p/player_osd.c.o libmpv.a.p/player_playloop.c.o libmpv.a.p/player_screenshot.c.o libmpv.a.p/player_scripting.c.o libmpv.a.p/player_sub.c.o libmpv.a.p/player_video.c.o libmpv.a.p/stream_cookies.c.o libmpv.a.p/stream_stream.c.o libmpv.a.p/stream_stream_avdevice.c.o libmpv.a.p/stream_stream_cb.c.o libmpv.a.p/stream_stream_concat.c.o libmpv.a.p/stream_stream_edl.c.o libmpv.a.p/stream_stream_file.c.o libmpv.a.p/stream_stream_lavf.c.o libmpv.a.p/stream_stream_memory.c.o libmpv.a.p/stream_stream_mf.c.o libmpv.a.p/stream_stream_null.c.o libmpv.a.p/stream_stream_slice.c.o libmpv.a.p/sub_ass_mp.c.o libmpv.a.p/sub_dec_sub.c.o libmpv.a.p/sub_draw_bmp.c.o libmpv.a.p/sub_filter_sdh.c.o libmpv.a.p/sub_img_convert.c.o libmpv.a.p/sub_lavc_conv.c.o libmpv.a.p/sub_osd.c.o libmpv.a.p/sub_osd_libass.c.o libmpv.a.p/sub_sd_ass.c.o libmpv.a.p/sub_sd_lavc.c.o libmpv.a.p/video_csputils.c.o libmpv.a.p/video_decode_vd_lavc.c.o libmpv.a.p/video_filter_refqueue.c.o libmpv.a.p/video_filter_vf_format.c.o libmpv.a.p/video_filter_vf_sub.c.o libmpv.a.p/video_fmt-conversion.c.o libmpv.a.p/video_hwdec.c.o libmpv.a.p/video_image_loader.c.o libmpv.a.p/video_image_writer.c.o libmpv.a.p/video_img_format.c.o libmpv.a.p/video_mp_image.c.o libmpv.a.p/video_mp_image_pool.c.o libmpv.a.p/video_out_aspect.c.o libmpv.a.p/video_out_bitmap_packer.c.o libmpv.a.p/video_out_dither.c.o libmpv.a.p/video_out_dr_helper.c.o libmpv.a.p/video_out_filter_kernels.c.o libmpv.a.p/video_out_gpu_context.c.o libmpv.a.p/video_out_gpu_error_diffusion.c.o libmpv.a.p/video_out_gpu_hwdec.c.o libmpv.a.p/video_out_gpu_lcms.c.o libmpv.a.p/video_out_gpu_libmpv_gpu.c.o libmpv.a.p/video_out_gpu_osd.c.o libmpv.a.p/video_out_gpu_ra.c.o libmpv.a.p/video_out_gpu_shader_cache.c.o libmpv.a.p/video_out_gpu_spirv.c.o libmpv.a.p/video_out_gpu_user_shaders.c.o libmpv.a.p/video_out_gpu_utils.c.o libmpv.a.p/video_out_gpu_video.c.o libmpv.a.p/video_out_gpu_video_shaders.c.o libmpv.a.p/video_out_libmpv_sw.c.o libmpv.a.p/video_out_vo.c.o libmpv.a.p/video_out_vo_gpu.c.o libmpv.a.p/video_out_vo_image.c.o libmpv.a.p/video_out_vo_lavc.c.o libmpv.a.p/video_out_vo_libmpv.c.o libmpv.a.p/video_out_vo_null.c.o libmpv.a.p/video_out_vo_tct.c.o libmpv.a.p/video_out_vo_kitty.c.o libmpv.a.p/video_out_win_state.c.o libmpv.a.p/video_repack.c.o libmpv.a.p/video_sws_utils.c.o libmpv.a.p/video_out_placebo_ra_pl.c.o libmpv.a.p/video_out_placebo_utils.c.o libmpv.a.p/video_out_vo_gpu_next.c.o libmpv.a.p/video_out_gpu_next_context.c.o libmpv.a.p/osdep_io.c.o libmpv.a.p/osdep_semaphore_osx.c.o libmpv.a.p/osdep_subprocess.c.o libmpv.a.p/osdep_timer.c.o libmpv.a.p/ta_ta.c.o libmpv.a.p/ta_ta_talloc.c.o libmpv.a.p/ta_ta_utils.c.o libmpv.a.p/osdep_threads-posix.c.o libmpv.a.p/input_ipc-unix.c.o libmpv.a.p/osdep_poll_wrapper.c.o libmpv.a.p/osdep_terminal-unix.c.o libmpv.a.p/sub_filter_regex.c.o libmpv.a.p/osdep_main-fn-unix.c.o libmpv.a.p/osdep_language-posix.c.o libmpv.a.p/osdep_path-unix.c.o libmpv.a.p/osdep_subprocess-posix.c.o libmpv.a.p/osdep_timer-linux.c.o libmpv.a.p/audio_chmap_avchannel.c.o libmpv.a.p/stream_dvb_tune.c.o libmpv.a.p/stream_stream_dvb.c.o libmpv.a.p/demux_demux_libarchive.c.o libmpv.a.p/stream_stream_libarchive.c.o libmpv.a.p/stream_stream_bluray.c.o libmpv.a.p/audio_filter_af_rubberband.c.o libmpv.a.p/video_filter_vf_fingerprint.c.o libmpv.a.p/video_zimg.c.o libmpv.a.p/audio_out_ao_alsa.c.o libmpv.a.p/audio_out_ao_jack.c.o libmpv.a.p/audio_out_ao_pulse.c.o libmpv.a.p/video_out_vo_caca.c.o libmpv.a.p/video_drmprime.c.o libmpv.a.p/video_out_drm_atomic.c.o libmpv.a.p/video_out_drm_common.c.o libmpv.a.p/video_out_drm_prime.c.o libmpv.a.p/video_out_hwdec_hwdec_drmprime.c.o libmpv.a.p/video_out_hwdec_hwdec_drmprime_overlay.c.o libmpv.a.p/video_out_vo_drm.c.o libmpv.a.p/video_out_present_sync.c.o libmpv.a.p/video_filter_vf_vavpp.c.o libmpv.a.p/video_vaapi.c.o libmpv.a.p/video_out_hwdec_hwdec_vaapi.c.o libmpv.a.p/video_out_hwdec_dmabuf_interop_pl.c.o -Wl,--as-needed -Wl,--allow-shlib-undefined -Wl,-O1 -Wl,-z,noexecstack -rdynamic -Wl,--start-group -lm -pthread /usr/lib/libz.a /usr/lib/libglib-2.0.a /usr/lib/libsysprof-capture-4.a /usr/lib/libpcre2-8.a -lass -lfontconfig -lexpat -lunibreak -lfribidi -lpng16 -lharfbuzz -lfreetype -lbz2 -lgraphite2 -lbrotlidec -lbrotlicommon /usr/lib/pkgconfig/../libgio-2.0.a /usr/lib/pkgconfig/../libgobject-2.0.a /usr/lib/pkgconfig/../libglib-2.0.a /usr/lib/pkgconfig/../libstdc++.a /usr/lib/pkgconfig/../libz.a -ldl -L/usr/lib/pkgconfig/../ -lavcodec -lvpx -lwebpmux -latomic -llzma -ldav1d -lopencore-amrwb -lrsvg-2 -lgdk_pixbuf-2.0 -lcairo -lsnappy -laom -lgsm -ljxl -ljxl_threads -lmp3lame -lopencore-amrnb -lopenjp2 -lopus -lrav1e -lspeex -lSvtAv1Enc -ltheoraenc -ltheoradec -logg -lvorbis -lvorbisenc -lwebp -lx264 -lx265 -lxvidcore -lva -lvpl -lswresample -lsoxr -lavutil -lva-drm -lva-x11 -lvdpau -lX11 -ldrm -lOpenCL -fopenmp -L/usr/lib/pkgconfig/../ -lavfilter -latomic -lbs2b -lrubberband -lfftw3 -lsamplerate -lharfbuzz -lfribidi -lplacebo -lvmaf -lass -lva -lvidstab -lzimg -lOpenCL -lfontconfig -lfreetype -lvpl -lswscale -lpostproc -lavformat -lxml2 -lbz2 -lmodplug -lopenmpt -lbluray -lgmp -lgnutls -lsrt -lssh -lavcodec -lvpx -lwebpmux -llzma -ldav1d -lopencore-amrwb -lrsvg-2 -lgdk_pixbuf-2.0 -lcairo -lsnappy -laom -lgsm -ljxl -ljxl_threads -lmp3lame -lopencore-amrnb -lopenjp2 -lopus -lrav1e -lspeex -lSvtAv1Enc -ltheoraenc -ltheoradec -logg -lvorbis -lvorbisenc -lwebp -lx264 -lx265 -lxvidcore -lswresample -lsoxr -lavutil -lva-drm -lva-x11 -lvdpau -lX11 -ldrm -L/usr/lib/pkgconfig/../ -lavformat -latomic -lxml2 -lbz2 -lmodplug -lopenmpt -lbluray -lgmp -lgnutls -lsrt -lssh -lavcodec -lvpx -lwebpmux -llzma -ldav1d -lopencore-amrwb -lrsvg-2 -lgdk_pixbuf-2.0 -lcairo -lsnappy -laom -lgsm -ljxl -ljxl_threads -lmp3lame -lopencore-amrnb -lopenjp2 -lopus -lrav1e -lspeex -lSvtAv1Enc -ltheoraenc -ltheoradec -logg -lvorbis -lvorbisenc -lwebp -lx264 -lx265 -lxvidcore -lva -lvpl -lswresample -lsoxr -lavutil -lva-drm -lva-x11 -lvdpau -lX11 -ldrm -lOpenCL -L/usr/lib/pkgconfig/../ -lavutil -lva-drm -lva -lva-x11 -lvdpau -lX11 -ldrm -lvpl -lOpenCL -latomic /usr/lib/libglslang-default-resource-limits.a /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/libSPIRV.so -lpthread /usr/lib/libutil.a -lrt -lc -lplacebo -lunwind -llzma -lshaderc_shared -lvulkan -llcms2 -ldovi -lgcc_s -L/usr/lib/pkgconfig/../ -lswresample -lsoxr -latomic -lavutil -lva-drm -lva -lva-x11 -lvdpau -lX11 -ldrm -lvpl -lOpenCL -L/usr/lib/pkgconfig/../ -lswscale -latomic -lavutil -lva-drm -lva -lva-x11 -lvdpau -lX11 -ldrm -lvpl -lOpenCL /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/libatomic.so -llcms2 -larchive -lcrypto -lacl -lexpat -llzma -lzstd -llz4 -lbz2 -fopenmp -L/usr/lib/pkgconfig/../ -lavdevice -latomic -lraw1394 -lavc1394 -lrom1394 -liec61883 -ljack -ldrm -lxcb -lxcb-shm -lxcb-shape -lxcb-xfixes -lasound -lGL -lpulse -lSDL2 -lv4l2 -lXv -lX11 -lXext -lavfilter -lbs2b -lrubberband -lfftw3 -lsamplerate -lharfbuzz -lfribidi -lplacebo -lvmaf -lass -lva -lvidstab -lzimg -lOpenCL -lfontconfig -lfreetype -lvpl -lswscale -lpostproc -lavformat -lxml2 -lbz2 -lmodplug -lopenmpt -lbluray -lgmp -lgnutls -lsrt -lssh -lavcodec -lvpx -lwebpmux -llzma -ldav1d -lopencore-amrwb -lrsvg-2 -lgdk_pixbuf-2.0 -lcairo -lsnappy -laom -lgsm -ljxl -ljxl_threads -lmp3lame -lopencore-amrnb -lopenjp2 -lopus -lrav1e -lspeex -lSvtAv1Enc -ltheoraenc -ltheoradec -logg -lvorbis -lvorbisenc -lwebp -lx264 -lx265 -lxvidcore -lswresample -lsoxr -lavutil -lva-drm -lva-x11 -lvdpau -lbluray -licuuc -licudata -lbz2 -lxml2 -llzma -licui18n -lfontconfig -lpng16 -lharfbuzz -lfreetype -lgraphite2 -lbrotlidec -lbrotlicommon -lexpat -lrubberband -lfftw3 -lsamplerate /usr/lib/libstdc++.a -lzimg -lasound -ljack -L/usr/lib/pulseaudio -lpulse -lpulsecommon-17.0 -lcaca -ldrm -lgbm -ljpeg -lva-drm -lva -lva -Wl,--end-group
/usr/sbin/ld: /usr/lib/pkgconfig/../libgobject-2.0.a(gclosure.c.o): in function `value_to_ffi_type':
(.text+0x2d0): undefined reference to `ffi_type_float'
/usr/sbin/ld: (.text+0x312): undefined reference to `ffi_type_pointer'
/usr/sbin/ld: (.text+0x343): undefined reference to `ffi_type_sint32'
/usr/sbin/ld: (.text+0x357): undefined reference to `ffi_type_uint64'
/usr/sbin/ld: (.text+0x377): undefined reference to `ffi_type_sint64'
/usr/sbin/ld: (.text+0x39b): undefined reference to `ffi_type_uint32'
/usr/sbin/ld: (.text+0x3ff): undefined reference to `ffi_type_double'
/usr/sbin/ld: /usr/lib/pkgconfig/../libgobject-2.0.a(gclosure.c.o): in function `g_cclosure_marshal_generic':
(.text+0x1fa3): undefined reference to `ffi_type_void'
/usr/sbin/ld: (.text+0x22a4): undefined reference to `ffi_type_pointer'
/usr/sbin/ld: (.text+0x2370): undefined reference to `ffi_prep_cif'
/usr/sbin/ld: (.text+0x23a0): undefined reference to `ffi_call'
/usr/sbin/ld: (.text+0x23f8): undefined reference to `ffi_type_pointer'
/usr/sbin/ld: /usr/lib/pkgconfig/../libgobject-2.0.a(gclosure.c.o): in function `g_cclosure_marshal_generic_va':
(.text+0x24e7): undefined reference to `ffi_type_void'
/usr/sbin/ld: (.text+0x2679): undefined reference to `ffi_type_pointer'
/usr/sbin/ld: (.text+0x288f): undefined reference to `ffi_prep_cif'
/usr/sbin/ld: (.text+0x28c3): undefined reference to `ffi_call'
/usr/sbin/ld: (.text+0x29d9): undefined reference to `ffi_type_uint64'
/usr/sbin/ld: (.text+0x2a09): undefined reference to `ffi_type_sint64'
/usr/sbin/ld: (.text+0x2a37): undefined reference to `ffi_type_sint32'
/usr/sbin/ld: (.text+0x2a5f): undefined reference to `ffi_type_uint32'
/usr/sbin/ld: (.text+0x2aec): undefined reference to `ffi_type_float'
/usr/sbin/ld: (.text+0x2c01): undefined reference to `ffi_type_double'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
quietvoid commented 8 months ago

Not an expert but I doubt Arch provides all the required static libraries by default. At least that's what the errors sound like.

MajliTech commented 8 months ago

Do you think building on Debian will help?

Dudemanguy commented 8 months ago

This builds for me. You are indeed missing a static libffi, but the --prefer-static option is just a preference. Meson should link to the dynamic one as a fallback which it does in my case.

MajliTech commented 8 months ago

What distro do you use?

Dudemanguy commented 8 months ago

Also Arch. I suppose if you have some random static libraries in your path this could happen. I would expect basically everything to be dynamically linked in practice on Arch since they don't distribute static libraries.

MajliTech commented 8 months ago

I will try to build on Debian and report back.

MajliTech commented 8 months ago

Now I tried in mpv-build with the scripts,

./scripts/mpv-config --default-library static --prefer-static -D wayland=disabled -D gl=disabled -D vulkan=disabled -D lua=disabled
./scripts/mpv-build

Result: https://0x0.st/Hk5a.txt Maybe some other features I can disable with -D?

eli-schwartz commented 8 months ago
/usr/sbin/ld: /usr/lib/pkgconfig/../libgobject-2.0.a(gclosure.c.o): in function `value_to_ffi_type':
(.text+0x2d0): undefined reference to `ffi_type_float'
/usr/sbin/ld: (.text+0x312): undefined reference to `ffi_type_pointer'
/usr/sbin/ld: (.text+0x343): undefined reference to `ffi_type_sint32'

Where did you get this /usr/lib/pkgconfig/../libgobject-2.0.a from?

MajliTech commented 8 months ago

Where should I get it from? I don't know, sorry but I'm still learning.