nyanmisaka / ffmpeg-rockchip

FFmpeg with async and zero-copy Rockchip MPP & RGA support
Other
325 stars 47 forks source link

undefined reference to ff_h264_* #55

Closed xaionaro closed 2 months ago

xaionaro commented 3 months ago

Hello. I'm using Raxda's Debian and I'm getting these errors:

root@radxa-zero3:/opt/ffmpeg-rockchip# make -j 4
HTML    doc/ffmpeg-scaler.html
HTML    doc/ffmpeg-utils.html
HTML    doc/ffmpeg-resampler.html
HTML    doc/ffprobe-all.html
HTML    doc/ffmpeg-codecs.html
HTML    doc/ffmpeg-bitstream-filters.html
HTML    doc/ffmpeg-formats.html
HTML    doc/ffmpeg-protocols.html
HTML    doc/ffmpeg-devices.html
HTML    doc/ffmpeg-filters.html
HTML    doc/libavutil.html
HTML    doc/libswscale.html
HTML    doc/libswresample.html
HTML    doc/libavcodec.html
HTML    doc/libavformat.html
HTML    doc/libavdevice.html
HTML    doc/libavfilter.html
HTML    doc/community.html
HTML    doc/developer.html
HTML    doc/faq.html
HTML    doc/fate.html
HTML    doc/general.html
HTML    doc/git-howto.html
HTML    doc/mailing-list-faq.html
HTML    doc/nut.html
HTML    doc/platform.html
POD doc/ffmpeg.pod
POD doc/ffplay.pod
POD doc/ffprobe.pod
POD doc/ffmpeg-all.pod
POD doc/ffplay-all.pod
POD doc/ffprobe-all.pod
POD doc/ffmpeg-utils.pod
POD doc/ffmpeg-scaler.pod
POD doc/ffmpeg-resampler.pod
POD doc/ffmpeg-codecs.pod
POD doc/ffmpeg-bitstream-filters.pod
POD doc/ffmpeg-formats.pod
POD doc/ffmpeg-protocols.pod
POD doc/ffmpeg-devices.pod
POD doc/ffmpeg-filters.pod
POD doc/libavutil.pod
POD doc/libswscale.pod
POD doc/libswresample.pod
POD doc/libavcodec.pod
POD doc/libavformat.pod
POD doc/libavdevice.pod
POD doc/libavfilter.pod
MAN doc/ffmpeg.1
MAN doc/ffplay.1
MAN doc/ffprobe.1
MAN doc/ffmpeg-all.1
MAN doc/ffplay-all.1
MAN doc/ffprobe-all.1
MAN doc/ffmpeg-utils.1
MAN doc/ffmpeg-scaler.1
MAN doc/ffmpeg-resampler.1
MAN doc/ffmpeg-codecs.1
MAN doc/ffmpeg-bitstream-filters.1
MAN doc/ffmpeg-formats.1
MAN doc/ffmpeg-protocols.1
MAN doc/ffmpeg-devices.1
MAN doc/ffmpeg-filters.1
MAN doc/libavutil.3
MAN doc/libswscale.3
MAN doc/libswresample.3
MAN doc/libavcodec.3
MAN doc/libavformat.3
MAN doc/libavdevice.3
MAN doc/libavfilter.3
LD  ffmpeg_g
LD  ffplay_g
/usr/bin/ld: /lib/aarch64-linux-gnu/libtirpc.so.3: warning: common of `rpc_createerr@@GLIBC_2.17' overridden by definition from /lib/aarch64-linux-gnu/libc.so.6
/usr/bin/ld: /lib/aarch64-linux-gnu/libtirpc.so.3: warning: common of `rpc_createerr@@GLIBC_2.17' overridden by definition from /lib/aarch64-linux-gnu/libc.so.6
LD  ffprobe_g
/usr/bin/ld: /lib/aarch64-linux-gnu/libtirpc.so.3: warning: common of `rpc_createerr@@GLIBC_2.17' overridden by definition from /lib/aarch64-linux-gnu/libc.so.6
/usr/bin/ld: /usr/bin/ld: libavcodec/libavcodec.a(h264_cavlc.o): in function `decode_mb_skip':
/opt/ffmpeg-rockchip/libavcodec/h264_mvpred.h:951libavcodec/libavcodec.a(h264_cavlc.o): in function `decode_mb_skip':
: undefined reference to `ff_h264_pred_direct_motion'
/opt/ffmpeg-rockchip/libavcodec/h264_mvpred.h:951: undefined reference to `ff_h264_pred_direct_motion'
/usr/bin/ld: /usr/bin/ld: libavcodec/libavcodec.a(h264_cavlc.o): in function `ff_h264_decode_mb_cavlc':
/opt/ffmpeg-rockchip/libavcodec/h264_cavlc.c:855: undefined reference to `ff_h264_pred_direct_motionlibavcodec/libavcodec.a(h264_cavlc.o): in function `ff_h264_decode_mb_cavlc':
/opt/ffmpeg-rockchip/libavcodec/h264_cavlc.c:855'
: undefined reference to `ff_h264_pred_direct_motion/usr/bin/ld: '
/opt/ffmpeg-rockchip/libavcodec/h264_cavlc.c:946: undefined reference to `ff_h264_pred_direct_motion'
/usr/bin/ld: /opt/ffmpeg-rockchip/libavcodec/h264_cavlc.c:946: undefined reference to `ff_h264_pred_direct_motion'
/usr/bin/ld/usr/bin/ld: : libavcodec/libavcodec.a(allcodecs.o):(libavcodec/libavcodec.a(allcodecs.o).data.rel.ro:+0x(.data.rel.ro+0xa0a0)): undefined reference to `: undefined reference to `ff_ffv1_encoderff_ffv1_encoder'
'
/usr/bin/ld: /usr/bin/ld: libavcodec/libavcodec.a(h264_slice.o): in function `h264_slice_init':
/opt/ffmpeg-rockchip/libavcodec/h264_slice.c:1935: undefined reference to `ff_h264_direct_dist_scale_factor'
/usr/bin/ld: /opt/ffmpeg-rockchip/libavcodec/h264_slice.c:1937: undefined reference to `ff_h264_direct_ref_list_init'
libavcodec/libavcodec.a(h264_slice.o): in function `h264_slice_init':
/opt/ffmpeg-rockchip/libavcodec/h264_slice.c:1935: undefined reference to `ff_h264_direct_dist_scale_factor'
/usr/bin/ld: /opt/ffmpeg-rockchip/libavcodec/h264_slice.c:1937: undefined reference to `ff_h264_direct_ref_list_init'
/usr/bin/ld: /usr/bin/ld: libavcodec/libavcodec.a(h264_cabac.o): in function `decode_mb_skip':
/opt/ffmpeg-rockchip/libavcodec/h264_mvpred.h:951: undefined reference to `ff_h264_pred_direct_motion'
/usr/bin/ld: libavcodec/libavcodec.a(h264_cabac.o): in function `ff_h264_decode_mb_cabac':
/opt/ffmpeg-rockchip/libavcodec/h264_cabac.c:2221: undefined reference to `ff_h264_pred_direct_motion'
/usr/bin/ld: /opt/ffmpeg-rockchip/libavcodec/h264_cabac.c:2124: undefined reference to `ff_h264_pred_direct_motion'
libavcodec/libavcodec.a(h264_cabac.o): in function `decode_mb_skip':
/opt/ffmpeg-rockchip/libavcodec/h264_mvpred.h:951: undefined reference to `ff_h264_pred_direct_motion'
/usr/bin/ld: libavcodec/libavcodec.a(h264_cabac.o): in function `ff_h264_decode_mb_cabac':
/opt/ffmpeg-rockchip/libavcodec/h264_cabac.c:2221: undefined reference to `ff_h264_pred_direct_motion'
/usr/bin/ld: /opt/ffmpeg-rockchip/libavcodec/h264_cabac.c:2124: undefined reference to `ff_h264_pred_direct_motion'
collect2: error: ld returned 1 exit status
make: *** [Makefile:133: ffmpeg_g] Error 1
make: *** Waiting for unfinished jobs....
collect2: error: ld returned 1 exit status
make: *** [Makefile:133: ffplay_g] Error 1
/usr/bin/ld: libavcodec/libavcodec.a(h264_cavlc.o): in function `decode_mb_skip':
/opt/ffmpeg-rockchip/libavcodec/h264_mvpred.h:951: undefined reference to `ff_h264_pred_direct_motion'
/usr/bin/ld: libavcodec/libavcodec.a(h264_cavlc.o): in function `ff_h264_decode_mb_cavlc':
/opt/ffmpeg-rockchip/libavcodec/h264_cavlc.c:855: undefined reference to `ff_h264_pred_direct_motion'
/usr/bin/ld: /opt/ffmpeg-rockchip/libavcodec/h264_cavlc.c:946: undefined reference to `ff_h264_pred_direct_motion'
/usr/bin/ld: libavcodec/libavcodec.a(allcodecs.o):(.data.rel.ro+0xa0): undefined reference to `ff_ffv1_encoder'
/usr/bin/ld: libavcodec/libavcodec.a(h264_slice.o): in function `h264_slice_init':
/opt/ffmpeg-rockchip/libavcodec/h264_slice.c:1935: undefined reference to `ff_h264_direct_dist_scale_factor'
/usr/bin/ld: /opt/ffmpeg-rockchip/libavcodec/h264_slice.c:1937: undefined reference to `ff_h264_direct_ref_list_init'
/usr/bin/ld: libavcodec/libavcodec.a(h264_cabac.o): in function `decode_mb_skip':
/opt/ffmpeg-rockchip/libavcodec/h264_mvpred.h:951: undefined reference to `ff_h264_pred_direct_motion'
/usr/bin/ld: libavcodec/libavcodec.a(h264_cabac.o): in function `ff_h264_decode_mb_cabac':
/opt/ffmpeg-rockchip/libavcodec/h264_cabac.c:2221: undefined reference to `ff_h264_pred_direct_motion'
/usr/bin/ld: /opt/ffmpeg-rockchip/libavcodec/h264_cabac.c:2124: undefined reference to `ff_h264_pred_direct_motion'
collect2: error: ld returned 1 exit status
make: *** [Makefile:133: ffprobe_g] Error 1

The configure command was copied from https://github.com/nyanmisaka/ffmpeg-rockchip/wiki/Compilation:

./configure --prefix=/usr --enable-gpl --enable-version3 --enable-libdrm --enable-rkmpp --enable-rkrga

Could somebody help to fix this?

root@radxa-zero3:/opt/ffmpeg-rockchip# git rev-parse HEAD
ba84e56c51d9cde1f3b1fead2a21e4d271028709
xaionaro commented 3 months ago

Deleted system libav libs and now it builds.

xaionaro commented 2 months ago

Just in case, my extremely humble opinion is that it looks like a bug (and the linker command needs fixing) when the building script uses external libs instead of the libs it just built; and then fails to link because of that. But assuming this is inherited from the upstream ffmpeg, so never mind...

faken commented 2 months ago

I am having the same issue, how did you delete the system libav?

xaionaro commented 2 months ago

Don't remember exactly, but I did something like (the actual command may differ):

dpkg --force-all -P `dpkg -l | grep libav | awk '{print $2}'`

Then rebuilt the ffmpeg. And then fixed back the system (installed missing packages for the system to function properly) using:

apt install -f