Hi folks,
I am in the process of moving to Qt6 and Maps SDK from Qt5.
I have just upgraded to Qt 6.8 and the ArcGIS templates fail to link. It looks like the missing symbols are from FFMpeg maybe, e.g. _av_buffer_create, _av_codec_iterate, _avcodec_decode_subtitle2, etc.
Is this a known issue or maybe something is wrong with my configuration?
Thanks!
Solved! Go to Solution.
Ok @JustinSteventon, sounds good. If you were still having issues with Qt 6.8.0, that is something I'd like to chase down. You should be able to use 6.8.0 if you want, and that's the latest LTS release as well.
Hey @JustinSteventon
We've found a couple of work arounds for now while we continue to look into this further.
Our recommended workaround would be to modify your `arcgis_runtime_qml_cpp.pri` to remove the `multimedia` entry from the listed Qt modules
QT += gui network positioning multimedia sensors websockets
The equivalent for CMake would be to remove multimedia from the `find_package` and `target_link_libraries` commands in your project's `CMakeLists.txt`
find_package(Qt6 COMPONENTS REQUIRED Core Quick Multimedia Positioning Sensors WebSockets)
...
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt6::Core
Qt6::Quick
Qt6::Multimedia
Qt6::Positioning
Qt6::Sensors
Qt6::WebSockets
ArcGISRuntime::Cpp)
This will mean however that `KMLTour` functionality will no longer work, and you will hit a linker error if you try to use it in your application.
If you need to use `KMLTour` functionality, the second solution we've found was to build the `ffmpeg` static libraries locally and incorporate them into your application. I was able to get this working locally with Qt 6.8.0 for iOS, and can assist with this further if needed. But if you don't need `KMLTour`, I would recommend the first solution.
Hi @JustinSteventon. What platform are you on? We had done some early testing with the Qt 6.8 betas and didn't see any problems like this.
I am on MacOS with XCode 16.0. I will check the Windows + Android build later and report back.
I tried a 200.5.0 template with Qt 6.8.0 on macOS (albeit using Xcode 15.2) and it links ok. Can you confirm if you installed the multimedia library with Qt 6.8.0? If you're upgrading from Qt 5, Qt moved some of the extra pieces into the "Additional Libraries" section with their installer. We do require a few of these, including Multimedia.
Note this screenshot is not our requirements. It's just an example. We do require (at a minimum), positioning, sensors, multimedia, and websockets Qt libraries.
Yes, and my MacOS build works fine. Also, I see the ffmpeg binaries in the Qt iOS plugins folder. I have reverted to 6.7.3 and the build works fine.
Ok @JustinSteventon, sounds good. If you were still having issues with Qt 6.8.0, that is something I'd like to chase down. You should be able to use 6.8.0 if you want, and that's the latest LTS release as well.
Right, for sure it needs to work. I noticed that the QML intellisense for 6.8 is busted, so it looks like it needs a bit more bake time. My plan is to return to this in a month when everything has been figured out. I assume that you guys will be testing 6.8 for your 200.6 release in any case.
Hey @JustinSteventon
Just a quick update. There was some confusion on our end with our original response. We are seeing the same linker errors as you are for iOS and Qt 6.8 and are investigating. Thanks for bringing this to our attention.
In the release notes for 6.8.0 (What's New in Qt 6.8 | Qt 6.8), they have the following line under new multimedia features:
So perhaps they are trying to leverage the built-in libraries rather than have their own full implementation.
Hey @JustinSteventon
We've found a couple of work arounds for now while we continue to look into this further.
Our recommended workaround would be to modify your `arcgis_runtime_qml_cpp.pri` to remove the `multimedia` entry from the listed Qt modules
QT += gui network positioning multimedia sensors websockets
The equivalent for CMake would be to remove multimedia from the `find_package` and `target_link_libraries` commands in your project's `CMakeLists.txt`
find_package(Qt6 COMPONENTS REQUIRED Core Quick Multimedia Positioning Sensors WebSockets)
...
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt6::Core
Qt6::Quick
Qt6::Multimedia
Qt6::Positioning
Qt6::Sensors
Qt6::WebSockets
ArcGISRuntime::Cpp)
This will mean however that `KMLTour` functionality will no longer work, and you will hit a linker error if you try to use it in your application.
If you need to use `KMLTour` functionality, the second solution we've found was to build the `ffmpeg` static libraries locally and incorporate them into your application. I was able to get this working locally with Qt 6.8.0 for iOS, and can assist with this further if needed. But if you don't need `KMLTour`, I would recommend the first solution.