Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion. Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules. |
22nd June 2022, 01:57 | #21 | Link |
...?
Join Date: Nov 2005
Location: Florida
Posts: 1,420
|
Try using make clean before building FFmpeg (or even make distclean, and then re-run configure as well, if you have to, add --enable-pic to the FFmpeg configure step). The recompile with -fPIC message sometimes just happens, but other times it's because some part of the configuration changed to include a new external library that was built with fPIC but the main FFmpeg was not.
|
22nd June 2022, 11:28 | #22 | Link | |
Registered User
Join Date: Dec 2010
Posts: 65
|
Quote:
So, as I first step I would double check your build from the basis: do you want ffmpeg shared (CHECK THIS!) ? ffms2 shared ? |
|
22nd June 2022, 18:01 | #23 | Link |
Registered User
Join Date: Aug 2020
Posts: 33
|
Thank you, people, for your replies. I REALLY need to get this working... This is my process (from scratch, i.e. no old files and folders). Can someone spot a problem? BIG THANKS!
1) Install AviSynthPlus and FFmpeg from the Community repo (inc. DevIL !) 2) Build/install minimal FFmpeg (*) 3) Build/install FFMS2, directing PKG_CONFIG_PATH to the minimal FFmpeg and installing it to $HOME/.local (**) (*) git clone git://git.ffmpeg.org/ffmpeg.git cd ffmpeg mkdir ffmpeg-build-for-ffms2 cd ffmpeg-build-for-ffms2 ../configure --prefix=$HOME/ffmpeg_build_for_ffms2 --enable-gpl --enable-version3 --disable-encoders --disable-muxers --disable-doc --enable-debug --disable-devices --disable-avdevice --enable-libdav1d --enable-pic --extra-cflags="-march=native" make -j$(nproc) make install (**) git clone git://github.com/FFMS/ffms2 ("git://" does not respond, so I am using "https://") cd ffms2 PKG_CONFIG_PATH=$HOME/ffmpeg_build_for_ffms2/lib/pkgconfig CPPFLAGS="-I/usr/include/avisynth" ./autogen.sh --prefix=$HOME/.local --libdir=$HOME/.local/lib/avisynth --enable-shared --enable-avisynth make -j$(nproc) ----8<---- - at this point I get the failure from above about relocation (1) mv /home/romashka/ffmpeg_build_for_ffms2/lib/libavcodec.a /home/romashka/ffmpeg_build_for_ffms2/lib/libavcodec.a.old (2) mv /home/romashka/ffmpeg_build_for_ffms2/lib/libswscale.a /home/romashka/ffmpeg_build_for_ffms2/lib/libswscale.a.old (3) make -j$(nproc) - at this point I get the undefined references failure (4) move the files from (1) & (2) back (5) make -j$(nproc) - at this point it builds fine ----8<---- make install So everything seemed to have worked. But then I run "ffplay film.avs" and get an error: [avisynth @ 0x7f554c000c80] Cannot load file '/home/romashka/.local/lib/avisynth/libffms2.so'. Reason: /home/romashka/.local/lib/avisynth/libffms2.so: undefined symbol: ff_mjpeg_val_ac_chrominance (film.avs, line 20) - Line 20 is a call to FFVideoSource() Last edited by forgetfool; 22nd June 2022 at 18:06. |
22nd June 2022, 19:16 | #24 | Link |
...?
Join Date: Nov 2005
Location: Florida
Posts: 1,420
|
Moving the FFmpeg libraries around manually outside the build process is what is breaking FFMS2, because you've removed the thing it *needs* to point to; the fact that it then builds absolutely means it's linking to the wrong library.
FFMS2 *should* be using -Wl,-Bsymbolic automatically when being pointed at a static FFmpeg, but if that's somehow broken, you have to provide it yourself to LDFLAGS.
__________________
AviSynth+ native Linux/macOS/BSD support | AviSynth+ utilities and plugins for non-Windows and non-x86(-64) Last edited by qyot27; 22nd June 2022 at 19:20. |
23rd June 2022, 01:30 | #25 | Link |
Registered User
Join Date: Aug 2020
Posts: 33
|
So what you are saying is that I need it to build naturally without the things I do in between ----8<----, right? Then it will link to the right libraries and will have no missing symbols?
This is what fails: echo " CXXLD " src/core/libffms2.la;/bin/sh ./libtool --silent --tag=CXX --mode=link g++ -std=c++11 -fvisibility=hidden -O3 -Wall -Wextra -version-info 5:0:0 -o src/core/libffms2.la -rpath /home/romashka/.local/lib/avisynth src/core/audiosource.lo src/core/ffms.lo src/core/filehandle.lo src/core/indexing.lo src/core/track.lo src/core/utils.lo src/core/videosource.lo src/core/videoutils.lo src/core/zipfile.lo src/vapoursynth/vapoursource.lo src/vapoursynth/vapoursynth.lo src/avisynth/avssources.lo src/avisynth/avisynth.lo -L/home/romashka/ffmpeg_build_for_ffms2/lib -lavformat -lbz2 -lm -lavcodec -lm -llzma -ldav1d -lz -lswscale -lswresample -lavutil -pthread -lva-drm -lva-x11 -lvdpau -lm -lva -latomic -lX11 -lz it looks like it's missing -Wl,-Bsymbolic. I'll try to see how to enable that. Last edited by forgetfool; 23rd June 2022 at 01:52. Reason: more info |
23rd June 2022, 16:28 | #27 | Link |
Registered User
Join Date: Aug 2020
Posts: 33
|
So I forced these things: -Wl,-Bsymbolic in LDFLAGS
It built. AND WORKS! So whats missing in the line below to get it included automatically? PKG_CONFIG_PATH=$HOME/ffmpeg_build_for_ffms2/lib/pkgconfig CPPFLAGS="-I/usr/include/avisynth" ./autogen.sh --prefix=$HOME/.local --libdir=$HOME/.local/lib/avisynth --enable-shared --enable-avisynth Last edited by forgetfool; 23rd June 2022 at 16:55. |
24th June 2022, 01:29 | #28 | Link |
...?
Join Date: Nov 2005
Location: Florida
Posts: 1,420
|
Nothing you can do to FFMS2 will make it add Bsymbolic automatically. The way FFmpeg was built caused the disconnect. There are probably scenarios where FFMS2 will correctly detect that Bsymbolic is needed and add it, but in other cases, it's going to always be a requirement that the user pass it to LDFLAGS.
Code:
PKG_CONFIG_PATH=$HOME/ffmpeg_build_for_ffms2/lib/pkgconfig CPPFLAGS="-I/usr/include/avisynth" LDFLAGS="-Wl,-Bsymbolic" ./autogen.sh --prefix=$HOME/.local --libdir=$HOME/.local/lib/avisynth --enable-shared --enable-avisynth |
24th June 2022, 17:24 | #29 | Link |
Registered User
Join Date: Aug 2020
Posts: 33
|
Thank you, qyot27, once again. Final input from me for now: it looks like I was simply missing --enable-shared flag when running ../configure for ffmpeg build (see above). Including the flag fixed the overall build for ffms2. For some reason the flag was not required before...
|
28th June 2022, 06:37 | #31 | Link |
Registered User
Join Date: Aug 2020
Posts: 33
|
Would anyone have an idea why both
1) ffplay film.avs 2) ffmpeg -i film.avs film.mkv produce segmentation fault at the end? Or is this question out of place here? The stream or output file end up fine... (gdb) bt #0 0x00007f197409c89e in free () at /usr/lib/libc.so.6 #1 0x00007f1973c181ba in Cache::~Cache() () at /usr/lib/libvmaf.so.1 #2 0x00007f196374d06e in Cache::~Cache() () at /usr/lib/libavisynth.so #3 0x00007f196376e58e in PClip::~PClip() () at /usr/lib/libavisynth.so #4 0x00007f196374d0de in CacheGuard::~CacheGuard() () at /usr/lib/libavisynth.so #5 0x00007f196374d11e in CacheGuard::~CacheGuard() () at /usr/lib/libavisynth.so #6 0x00007f196376e58e in PClip::~PClip() () at /usr/lib/libavisynth.so #7 0x00007f19637d6801 in () at /usr/lib/libavisynth.so #8 0x00007f196376e58e in PClip::~PClip() () at /usr/lib/libavisynth.so #9 0x00007f19637d6881 in () at /usr/lib/libavisynth.so #10 0x00007f196376f8b4 in AVSValue:ESTRUCTOR() () at /usr/lib/libavisynth.so #11 0x00007f196376f94e in AVSValue::~AVSValue() () at /usr/lib/libavisynth.so #12 0x00007f196373ab98 in ScriptEnvironment::~ScriptEnvironment() () at /usr/lib/libavisynth.so #13 0x00007f1963748fae in ScriptEnvironment:eleteScriptEnvironment() () at /usr/lib/libavisynth.so #14 0x00007f196374c9af in avs_delete_script_environment () at /usr/lib/libavisynth.so #15 0x00007f1975a3c355 in () at /usr/lib/libavformat.so.59 #16 0x00007f1975a3c40f in () at /usr/lib/libavformat.so.59 #17 0x00007f1975a8bf85 in avformat_close_input () at /usr/lib/libavformat.so.59 #18 0x000055c525cf5241 in () #19 0x000055c525cf57a5 in () #20 0x000055c525ce55c5 in main () Last edited by forgetfool; 28th June 2022 at 07:46. |
2nd July 2022, 02:53 | #32 | Link |
Registered User
Join Date: Aug 2020
Posts: 33
|
BLOODY HELL! This is impossible...
I have done everything again from complete scratch from the very start as I mention above (just to have --enable-debug for ffms2) and now everything just locks up... It's like that initial deadlock if you use original ffms2, except that it definitely uses my the manually built libffms2.so (if don't do AddAutoloadDir("/home/romashka/.local/lib/avisynth") it complains about not finding FFVideoSource). I have done everything without --enable-debug, from scratch (just to be sure)... ffplay film.avs still locks up ffplay film.avs ffplay version n5.0.1 Copyright (c) 2003-2022 the FFmpeg developers built with gcc 12.1.0 (GCC) configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3 libavutil 57. 17.100 / 57. 17.100 libavcodec 59. 18.100 / 59. 18.100 libavformat 59. 16.100 / 59. 16.100 libavdevice 59. 4.100 / 59. 4.100 libavfilter 8. 24.100 / 8. 24.100 libswscale 6. 4.100 / 6. 4.100 libswresample 4. 3.100 / 4. 3.100 libpostproc 56. 3.100 / 56. 3.100 nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0 Last edited by forgetfool; 2nd July 2022 at 03:02. |
2nd July 2022, 18:20 | #33 | Link |
Registered User
Join Date: Aug 2020
Posts: 33
|
It's even crazier:
LOCKS UP (all proper files/func names) - AddAutoloadDir("/home/romashka/.local/lib/avisynth") a = FFAudioSource("audio.mp3") v = FFVideoSource("video.AVI") AudioDub(v, a) LOCKS UP (no audio involved) - AddAutoloadDir("/home/romashka/.local/lib/avisynth") FFVideoSource("video.AVI") RAISES AN ERROR (as expected, no such video) - AddAutoloadDir("/home/romashka/.local/lib/avisynth") FFVideoSource("no-such-video.AVI") LOCKS UP (????????!!!!!) AddAutoloadDir("/home/romashka/.local/lib/avisynth") a = FFAudioSource("audio.mp3") v = FFVideoSource("no-such-video.AVI") AudioDub(v, a) RAISES AN ERROR (as expected, wrong func name) - AddAutoloadDir("/home/romashka/.local/lib/avisynth") FFVideoSourceblahblahblah("no-such-video.AVI") LOCKS UP (????????!!!!!) AddAutoloadDir("/home/romashka/.local/lib/avisynth") a = FFAudioSource("audio.mp3") v = FFVideoSourceblahblahblah("no-such-video.AVI") AudioDub(v, a) LSMASHSource(), DirectShowSource(), FFmpegSource() all lock up (when using just them with a valid file) Last edited by forgetfool; 2nd July 2022 at 18:47. |
2nd July 2022, 19:27 | #34 | Link |
...?
Join Date: Nov 2005
Location: Florida
Posts: 1,420
|
Arch doesn't put the subdirectories in ~/.local on the system search paths; you have to do that yourself.
To reiterate again: build the minimal FFmpeg as static, and configure FFMS2 with LDFLAGS="-Wl,-Bsymbolic". |
3rd July 2022, 07:51 | #35 | Link |
Registered User
Join Date: Aug 2020
Posts: 33
|
Ok, I got it working cleaning EVERYTHING out first. This is my process.
for minimal FFMPEG: 1) ../configure --prefix=$HOME/ffmpeg_build_for_ffms2 --enable-gpl --enable-version3 --disable-encoders --disable-muxers --disable-doc --enable-debug --disable-devices --disable-avdevice --enable-libdav1d --extra-cflags="-march=native" 2) make -j$(nproc) 3) make install This puts all the built stuff into $HOME/ffmpeg_build_for_ffms2 for FFMS2: 1) PKG_CONFIG_PATH=$HOME/ffmpeg_build_for_ffms2/lib/pkgconfig CPPFLAGS="-I/usr/include/avisynth" ./autogen.sh --prefix=$HOME/.local --libdir=$HOME/.local/lib/avisynth --enable-shared --enable-avisynth 2) make -j$(nproc) 3) make install Currently 2) fails with the message "lib/libavcodec.a(vc1dsp_mmx.o): relocation R_X86_64_PC32 against symbol `ff_pw_9' can not be used when making a shared object; recompile with -fPIC" Everything goes smoothly if I manually enable the required flags in configure (src_core_libffms2_la_LDFLAGS="-Wl,-Bsymbolic"). They should be enabled automatically, I think, from the code below, but they are not: ..... if ac_fn_c_try_link "$LINENO" then : eval no_bsymbolic=yes else $as_nop eval no_bsymbolic=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$no_bsymbolic" = "no"; then LDFLAGS="$LDFLAGS -Wl,-Bsymbolic" ..... So I re-run 2), then run 3) and it puts libffms2.so into $HOME/.local/lib/avisynth, and that's the one that is being used (I verified that). (Perhaps, I MUST CLEAN EVERYTHING, otherwise it links to old/global things and that's why I get a deadlock, like with the main package FFMS2...) "/usr/bin/ffplay -v trace film.avs" (i.e. using the official FFMPEG package) works fine, however, it produces segfault after the rendering is finished. Initialized opengl renderer. ffplay version n5.0.1 Copyright (c) 2003-2022 the FFmpeg developers built with gcc 12.1.0 (GCC) configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3 libavutil 57. 17.100 / 57. 17.100 libavcodec 59. 18.100 / 59. 18.100 libavformat 59. 16.100 / 59. 16.100 libavdevice 59. 4.100 / 59. 4.100 libavfilter 8. 24.100 / 8. 24.100 libswscale 6. 4.100 / 6. 4.100 libswresample 4. 3.100 / 4. 3.100 libpostproc 56. 3.100 / 56. 3.100 Initialized opengl renderer. [NULL @ 0x7fae94000c80] Opening '/home/romashka/Downloads/video-test/film-test-linux.avs' for reading [file @ 0x7fae940015c0] Setting default whitelist 'file,crypto,data' [avisynth @ 0x7fae94000c80] Format avisynth probed with size=2048 and score=50 [avisynth @ 0x7fae94000c80] avs_is_field_based: 0 sq= 0B f=0/0 [avisynth @ 0x7fae94000c80] avs_is_parity_known: 0 [avisynth @ 0x7fae94000c80] Before avformat_find_stream_info() pos: 0 bytes read:1541 seeks:0 nb_streams:2 [avisynth @ 0x7fae94000c80] All info found 0KB sq= 0B f=0/0 [avisynth @ 0x7fae94000c80] stream 0: start_time: 0 duration: 41 [avisynth @ 0x7fae94000c80] stream 1: start_time: 0 duration: 242.86 [avisynth @ 0x7fae94000c80] format: start_time: 0 duration: 242.86 (estimate from stream) bitrate=0 kb/s [avisynth @ 0x7fae94000c80] After avformat_find_stream_info() pos: 0 bytes read:1541 seeks:0 frames:3..... ... ... all the frames rendering... ... Segmentation Fault So what you meant by "STATIC build" is what I already have via main FFMPEG package (/usr/bin/ffmpeg & friends). But, I think, it is not static. It's just "complete" so to speak, not "minimal", like the guy I am building for FFMS2 to work. The idea was to build a minimal FFMPEG, just so that we can build FFMS2 manually. Can you please explain in more detail why we needed that, i.e. why the FFMS2 that comes with a distro would not work (i.e. causes deadlock)? Can it be made to work? What's needed for that? Now back to segfault. I guess the problem is with the different versions of libs: package ("complete") FFMPEG has: libavutil 57. 17.100 / 57. 17.100 libavcodec 59. 18.100 / 59. 18.100 libavformat 59. 16.100 / 59. 16.100 libavdevice 59. 4.100 / 59. 4.100 libavfilter 8. 24.100 / 8. 24.100 libswscale 6. 4.100 / 6. 4.100 libswresample 4. 3.100 / 4. 3.100 libpostproc 56. 3.100 / 56. 3.100 manually built ("minimal") FFMPEG has: libavutil 57. 27.100 / 57. 27.100 libavcodec 59. 35.100 / 59. 35.100 libavformat 59. 25.100 / 59. 25.100 libavfilter 8. 41.100 / 8. 41.100 libswscale 6. 6.100 / 6. 6.100 libswresample 4. 6.100 / 4. 6.100 libpostproc 56. 5.100 / 56. 5.100 Can you please take time to read the above. I really want to understand what's going on. Thank you, and I really appreciate you spending time on this! Last edited by forgetfool; 3rd July 2022 at 14:13. |
Tags |
linux |
Thread Tools | Search this Thread |
Display Modes | |
|
|