Qt 7.6.1 problem building qtmultimedia with ffmpeg plugin
-
I am trying to build Qt 7.6.1 from the git sources on Ubuntu 22.04 so I can create a custom version of ffmpeg and QT Creator. So far I have managed to build everything in the Qt 7.6.1 source except the multimedia module with ffmpeg plugin enabled.
I am getting an error stopping the build which is
/usr/bin/ld: qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpeg.cpp.o: in function `QFFmpeg::createResampleContext(QFFmpeg::AVAudioFormat const&, QFFmpeg::AVAudioFormat const&)': qffmpeg.cpp:(.text+0xd27): undefined reference to `swr_alloc_set_opts2'
After a bit of digging around I can see that swr_alloc_set_opts2 is in FFmpeg libsswresample and so assume I have something not configured correctly for this to be found or linked to.
When running configure in verbose mode the result for qtmultimedia is
-- Configuring submodule 'qtmultimedia' -- [QtMultimedia] Could NOT find AVFoundation (missing: AVFoundation_LIBRARY) -- [QtMultimedia] Found GLIB2: /usr/lib/x86_64-linux-gnu/libglib-2.0.so -- [QtMultimedia] Checking for module 'gobject-2.0' -- [QtMultimedia] Found gobject-2.0, version 2.72.4 -- [QtMultimedia] Found GStreamer: TRUE -- [QtMultimedia] Found GLIB2: /usr/lib/x86_64-linux-gnu/libglib-2.0.so -- [QtMultimedia] Found GStreamer: TRUE found components: App -- [QtMultimedia] Found GLIB2: /usr/lib/x86_64-linux-gnu/libglib-2.0.so -- [QtMultimedia] Found GStreamer: TRUE found components: Photography -- [QtMultimedia] Found GLIB2: /usr/lib/x86_64-linux-gnu/libglib-2.0.so -- [QtMultimedia] Found GStreamer: TRUE found components: Gl -- [QtMultimedia] Could NOT find MMRendererCore (missing: MMRendererCore_LIBRARY) -- [QtMultimedia] Could NOT find MMRenderer (missing: MMRenderer_LIBRARY) -- [QtMultimedia] Could NOT find WMF (missing: WMF_STRMIIDS_LIBRARY WMF_AMSTRMID_LIBRARY WMF_DMOGUIDS_LIBRARY WMF_MSDMO_LIBRARY WMF_OLE32_LIBRARY WMF_OLEAUT32_LIBRARY WMF_MF_LIBRARY WMF_MFUUID_LIBRARY WMF_MFPLAT_LIBRARY WMF_MFCORE_LIBRARY WMF_PROPSYS_LIBRARY) -- [QtMultimedia] FFmpeg shared libs: /usr/lib/x86_64-linux-gnu/libavcodec.so;/usr/lib/x86_64-linux-gnu/libavcodec.so.58;/usr/lib/x86_64-linux-gnu/libavcodec.so.58.134.100;/usr/lib/x86_64-linux-gnu/libavformat.so;/usr/lib/x86_64-linux-gnu/libavformat.so.58;/usr/lib/x86_64-linux-gnu/libavformat.so.58.76.100;/usr/lib/x86_64-linux-gnu/libavutil.so;/usr/lib/x86_64-linux-gnu/libavutil.so.56;/usr/lib/x86_64-linux-gnu/libavutil.so.56.70.100;/usr/lib/x86_64-linux-gnu/libswresample.so;/usr/lib/x86_64-linux-gnu/libswresample.so.3;/usr/lib/x86_64-linux-gnu/libswresample.so.3.9.100;/usr/lib/x86_64-linux-gnu/libswscale.so;/usr/lib/x86_64-linux-gnu/libswscale.so.5;/usr/lib/x86_64-linux-gnu/libswscale.so.5.9.100 -- [QtMultimedia] Generated QtModulePlugins.cmake files for the following modules: Multimedia
So if configure is finding the relevant libraries why is the build then failing later?
I'm sure it is something relatively simple in the include file or library links somewhere I must need to tweak but totally stumped how to resolve this. Can anyone offer any suggestions on what I am doing wrong or what to try?
Thanks in advance.
-
Hi and welcome to devnet,
It's going to be hard to help you, you are building code not existing yet :-D (Qt 7 is not planned yet).
Back to your issue, did you check whether the library is linked at all with the plugin ?
-
@SGaist How can I check the library is linked with the plugin ?
As far as I understand the line being built is
5915/6611] Linking CXX shared module qtbase/plugins/multimedia/libffmpegmediaplugin.so FAILED: qtbase/plugins/multimedia/libffmpegmediaplugin.so : && /usr/bin/c++ -fPIC -DNDEBUG -O2 -Wl,--no-undefined -Wl,--version-script,/home/chris/Qt/qt6build/qtmultimedia/src/plugins/multimedia/ffmpeg/QFFmpegMediaPlugin.version -Wl,--enable-new-dtags -Wl,--exclude-libs=libavformat -Wl,--exclude-libs=libavcodec -Wl,--exclude-libs=libswresample -Wl,--exclude-libs=libswscale -Wl,--exclude-libs=libavutil -shared -o qtbase/plugins/multimedia/libffmpegmediaplugin.so qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/QFFmpegMediaPlugin_autogen/mocs_compilation.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpeg.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegioutils.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegavaudioformat.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegaudiodecoder.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegaudioinput.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpeghwaccel.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegmediametadata.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegmediaplayer.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegvideosink.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegmediaformatinfo.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegmediaintegration.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegvideobuffer.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegimagecapture.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegmediacapturesession.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegmediarecorder.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegthread.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegresampler.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegencodingformatcontext.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qgrabwindowsurfacecapture.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegsurfacecapturegrabber.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegplaybackengine.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/playbackengine/qffmpegplaybackengineobject.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/playbackengine/qffmpegdemuxer.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/playbackengine/qffmpegstreamdecoder.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/playbackengine/qffmpegrenderer.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/playbackengine/qffmpegaudiorenderer.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/playbackengine/qffmpegvideorenderer.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/playbackengine/qffmpegsubtitlerenderer.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/playbackengine/qffmpegtimecontroller.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/playbackengine/qffmpegmediadataholder.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/playbackengine/qffmpegcodec.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/recordingengine/qffmpegaudioencoder.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/recordingengine/qffmpegaudioencoderutils.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/recordingengine/qffmpegencoderthread.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/recordingengine/qffmpegencoderoptions.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/recordingengine/qffmpegmuxer.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/recordingengine/qffmpegrecordingengine.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/recordingengine/qffmpegvideoencoder.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/recordingengine/qffmpegvideoencoderutils.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/recordingengine/qffmpegvideoframeencoder.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegsymbolsresolveutils.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegvaapisymbols.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpeghwaccel_vaapi.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qx11surfacecapture.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qx11capturablewindows.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qeglfsscreencapture.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qopenglvideobuffer.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qv4l2camera.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qv4l2filedescriptor.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qv4l2memorytransfer.cpp.o qtmultimedia/src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qv4l2cameradevices.cpp.o -Wl,-rpath,/home/chris/Qt/qt6build/qtbase/lib: /usr/lib/x86_64-linux-gnu/libEGL.so -lX11 -lXrandr -lXext qtbase/lib/libQt6Quick.so.6.7.1 qtbase/lib/libQt6Multimedia.so.6.7.1 /usr/lib/x86_64-linux-gnu/libxkbcommon.so qtbase/lib/libQt6OpenGL.so.6.7.1 qtbase/lib/libQt6Gui.so.6.7.1 /usr/lib/x86_64-linux-gnu/libGLX.so /usr/lib/x86_64-linux-gnu/libOpenGL.so qtbase/lib/libQt6QmlModels.so.6.7.1 qtbase/lib/libQt6Qml.so.6.7.1 qtbase/lib/libQt6QmlBuiltins.a qtbase/lib/libQt6Network.so.6.7.1 qtbase/lib/libQt6Core.so.6.7.1 -lavformat -lavcodec -lswresample -lswscale -lavutil -Wl,-rpath-link,/home/chris/Qt/qt6build/qtbase/lib && :
and the option -lswresample should be doing it.
I'm not an expert in Cmake and the tools so please let me know if I need to look somewhere else.
-
It should already be there but did you check the library to see if the symbol is available ? I don't see a reason for it not to be there though but at least it will remove a suspect.
-
@SGaist I couldn't find anything that was wrong or why it was not working so decided to spend my time/energy in getting a clean install of Ubuntu 24.04 up and running and then built Qt6.7.1 with all the dependancies. I've just built QT Creator succesfully against my 671 build and so got what I wanted in the end.
Thanks for your comments and pointers, time to go play with making Creator widget plug ins now :-)