I received a user report about ABI breakage between ffmpeg 3.0 and 3.3 through the distribution commenting system https://build.opensuse.org/package/show/multimedia:libs/ffmpeg :
"""I'm having a library compiled against ffmpeg 3.3 on OBS. It uses the avcodec_{send|receive}packet() functions. On my local machine I still have ffmpeg 3.0 installed. Updating the library doesnt trigger updating libav* since soversion hasnt changed. If the library now attempts to use avcodecsend_packet() I receive SIGBUS.""" I am posting to this list as the "fix" for this problem is not a patch, but a change in review process. Upon closer inspection of the ffmpeg source, the problem the user has experienced has two causes: 1. Failure to properly do ELF versioning. avcodec_receive_packet was added in commit 7fc329e2dd6226dfecaa4a1d7adf353bf2773726. This commit bumped the minor version number, but completely ignored adding the necessary versions into libavcodec/libavcodec.v. What should have been added: LIBAVCODEC_57.37 { global: avcodec_receive_packet; avcodec_send_packet; /* etc. */ } LIBAVCODEC_57.36; Instead, all symbols just always get added into a symbol group that existed previously (LIBAVCODEC_57). This defeats package management utilities like rpm which only look at the symbol groups and not individual symbols. Fixing the .v file with a patch now won't help remedy the situation on existing systems; however, on future patch submissions, this action of editing the .v file needs to be remembered when functions are added or removed. 2. The layout of struct AVCodec changed. Four function pointers were inserted in the middle, shifting void (*flush) to a new address. The size of AVCodec also changed, which would have required a full MAJOR bump. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel