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: MultimediaSo 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 ?
-
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.
-
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 :-)