...
-- Looking for gz-sim8 - found
-- Compiling against Gazebo Harmonic
-- RapidJSON found. Headers: /usr/local/Cellar/rapidjson/1.1.0/include
-- Found OpenCV: /usr/local/Cellar/opencv/4.12.0_13 (found version "4.12.0")
-- Checking for modules 'gstreamer-1.0;gstreamer-app-1.0'
-- Found gstreamer-1.0, version 1.26.7
-- Found gstreamer-app-1.0, version 1.26.7
-- Configuring done (6.4s)
CMake Error at /usr/local/lib/cmake/gz-gui8/gz-gui8-targets.cmake:61 (set_target_properties):
The link interface of target "gz-gui8::gz-gui8" contains:
Qt5::Core
but the target was not found. Possible reasons include:
* There is a typo in the target name.
* A find_package call is missing for an IMPORTED target.
* An ALIAS target is missing.
Call Stack (most recent call first):
/usr/local/lib/cmake/gz-gui8/gz-gui8-config.cmake:131 (include)
/usr/local/lib/cmake/gz-sim8/gz-sim8-config.cmake:98 (find_package)
/usr/local/share/cmake/gz-cmake3/cmake3/GzFindPackage.cmake:243 (find_package)
CMakeLists.txt:31 (gz_find_package)
-- Generating done (0.1s)
CMake Generate step failed. Build files cannot be regenerated correctly.
[ 10%] Building CXX object CMakeFiles/CameraZoomPlugin.dir/src/CameraZoomPlugin.cc.o
[ 20%] Building CXX object CMakeFiles/ParachutePlugin.dir/src/ParachutePlugin.cc.o
[ 40%] Building CXX object CMakeFiles/ArduPilotPlugin.dir/src/ArduPilotPlugin.cc.o
[ 40%] Building CXX object CMakeFiles/GstCameraPlugin.dir/src/GstCameraPlugin.cc.o
[ 50%] Linking CXX shared library libGstCameraPlugin.dylib
[ 60%] Linking CXX shared library libParachutePlugin.dylib
ld: library 'Qt5::Core' not found
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [libGstCameraPlugin.dylib] Error 1
make[1]: *** [CMakeFiles/GstCameraPlugin.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 70%] Building CXX object CMakeFiles/ArduPilotPlugin.dir/src/SocketUDP.cc.o
ld: library 'Qt5::Core' not found
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [libParachutePlugin.dylib] Error 1
make[1]: *** [CMakeFiles/ParachutePlugin.dir/all] Error 2
[ 80%] Building CXX object CMakeFiles/ArduPilotPlugin.dir/src/Util.cc.o
[ 90%] Linking CXX shared library libCameraZoomPlugin.dylib
ld: library 'Qt5::Core' not found
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [libCameraZoomPlugin.dylib] Error 1
make[1]: *** [CMakeFiles/CameraZoomPlugin.dir/all] Error 2
[100%] Linking CXX shared library libArduPilotPlugin.dylib
ld: library 'Qt5::Core' not found
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [libArduPilotPlugin.dylib] Error 1
make[1]: *** [CMakeFiles/ArduPilotPlugin.dir/all] Error 2
make: *** [all] Error 2
I attempted a scorched earth installation of the related gazebo dependencies, but continuously miss this target. Initially, I suspected an incomplete brew uninstallation to be the culprit; but still no luck after pruning some lingering jetty and ionic remnants.
Has anyone encountered this issue and know a resolution? May I provide any additional context to help aid in debugging?
There’s a missing dependency (Qt5). I’d recommend running Gazebo Jetty on macOS now as it depends on Qt6, which is the default version installed if you are using brew.
brew install qt
To get the Harmonic version to build it is necessary to export the following environment variables prior to compiling the plugin.
# set environment for Qt: https://gazebosim.org/docs/harmonic/install_osx_src
# qt5
export CMAKE_PREFIX_PATH=/usr/local/opt/qt@5:$CMAKE_PREFIX_PATH
export PATH=/usr/local/opt/qt@5/bin:$PATH
# Gazebo version
export GZ_VERSION=harmonic
I tried using Jetty, but keep running into a seg fault
...
Msg [NameManager::issueNewName] (Skeleton::BodyNode | iris_with_gimbal::iris_with_standoffs) The name [base_link] is a duplicate, so it has been renamed to [base_link(1)]
Msg [NameManager::issueNewName] (Skeleton::N4dart8dynamics9ShapeNodeE | iris_with_gimbal::iris_with_standoffs) The name [base_link:base_collision] is a duplicate, so it has been renamed to [base_link:base_collision(1)]
(2025-10-27 21:13:05.347) [debug] [Sensors.cc:923] Initialization needed
(2025-10-27 21:13:05.347) [info] [RenderEngineManager.cc:514] Loading plugin [gz-rendering-ogre2]
(2025-10-27 21:13:05.533) [error] [Ogre2RenderEngine.cc:469] Failed to load render-engine
(2025-10-27 21:13:05.533) [error] [BaseRenderEngine.cc:55] Render-engine must be loaded first
(2025-10-27 21:13:05.533) [debug] [RenderUtil.cc:2646] Create scene [scene]
(2025-10-27 21:13:05.533) [error] [BaseRenderEngine.cc:215] Render-engine has not been initialized
(2025-10-27 21:13:05.533) [error] [MarkerManager.cc:167] Scene pointer is invalid
(2025-10-27 21:13:05.533) [debug] [Sensors.cc:953] Initialization needed
(2025-10-27 21:13:05.533) [debug] [CameraZoomPlugin.cc:502] Camera name: [iris_with_gimbal::gimbal::pitch_link::camera].
(2025-10-27 21:13:05.533) [debug] [Sensors.cc:349] Initializing render context
Stack trace (most recent call last) in thread 123145473695744:
(2025-10-27 21:13:05.534) [debug] [ImuSensor.cc:150] IMU data for [iris_with_gimbal::iris_with_standoffs::imu_link::imu_sensor] advertised on [world/iris_runway/model/iris_with_gimbal/model/iris_with_standoffs/link/imu_link/sensor/imu_sensor/imu]
(2025-10-27 21:13:05.534) [info] [SceneBroadcaster.cc:634] Serving scene information on [/world/iris_runway/scene/info]
#7 Object "libsystem_pthread.dylib", at 0x7ff817c59202, in _pthread_start + 99
#6 Object "libgz-sim-sensors-system.10.0.0.dyl", at 0x11fdf2843, in void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, void (gz::sim::v10::systems::SensorsPrivate::*)(), gz::sim::v10::systems::SensorsPrivate*>>(void*) + 62
#5 (2025-10-27 21:13:05.534) [info] [SceneBroadcaster.cc:643] Serving graph information on [/world/iris_runway/scene/graph]
Object "libgz-sim-sensors-system.10.0.0.dyl", at 0x11fdddeb3, in gz::sim::v10::systems::SensorsPrivate::RenderThread() + 183
#4 Object "libgz-sim-sensors-system.10.0.0.dyl", at 0x11fddcfd8, in gz::sim::v10::systems::SensorsPrivate::WaitForInit() + 638
#3 Object "libsystem_platform.dylib", at 0x7ff817c8637c, in _sigtramp + 28
#2 Object "gz-sim-main", at 0x105502e63, in backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 13
#1 Object "gz-sim-main", at 0x105502ecf, in backward::SignalHandling::handleSignal(int, __siginfo*, void*) + 77
#0 Object "gz-sim-main", at 0x105503013, in backward::StackTraceImpl<backward::system_tag::darwin_tag>::load_from(void*, unsigned long, void*, void*) + 33
zsh: segmentation fault gz sim -v4 -r iris_runway.sdf
I’m on Mac Sonoma and the latest supported Mac OS version appears to be Ventura. Note, when I run the process headless with the -s flag, it doesn’t segfault. Couldn’t sort out in more detail whether my drivers were out of date or something fundamentally unsupported.
Trying again with your env var suggestion using Harmonic! Will update here on progress.
Later versions of macOS work as well. I am am using macOS Sequoia 15.6.1 on x86_64 and arm64 machines.
Are the basic example worlds running ok in your from source build (the shapes.sdf and senors.sdf are good tests). I always run the server and gui in separate terminals on macOS. It’s not required for Jetty, but essential on earlier versions. This will also help with debugging whether the issue is with rendering or the physics engine.
This line
[Ogre2RenderEngine.cc:469] Failed to load render-engine
suggests that there is a missing dependency on Ogre2.
If the Gazebo examples work, and there is still an error with the ArduPilot plugin then check back here with details and I can review.
...
23:03:53: All done
23:03:53: Added resource location '/usr/local/Cellar/gz-rendering10/10.0.0_2/share/gz/gz-rendering/media/materials/textures/' of type 'FileSystem' to resource group 'General'
23:03:53: Can't assign material [Default] because this Material does not exist. Have you forgotten to define it in a .material script?
23:03:53: Can't assign material scene::Material(65501) because this Material does not exist. Have you forgotten to define it in a .material script?
23:03:53: Can't assign material scene::Material(65495) because this Material does not exist. Have you forgotten to define it in a .material script?
23:03:53: Can't assign material scene::Material(65489) because this Material does not exist. Have you forgotten to define it in a .material script?
23:03:53: Can't assign material scene::Material(65483) because this Material does not exist. Have you forgotten to define it in a .material script?
23:03:53: Can't assign material scene::Material(65476) because this Material does not exist. Have you forgotten to define it in a .material script?
23:03:53: Can't assign material scene::Material(65483) because this Material does not exist. Have you forgotten to define it in a .material script?
23:03:53: Can't assign material scene::Material(65465) because this Material does not exist. Have you forgotten to define it in a .material script?
23:03:53: OGRE EXCEPTION(3:RenderingAPIException): Fixed Function pipeline is no longer allowed nor supported. The material scene::Material(65518) must use shaders in HlmsLowLevel::calculateHashFor at /tmp/ogre2.3-20240920-18264-919rfb/ogre-next-2.3.1/OgreMain/src/OgreHlmsLowLevel.cpp (line 163)
23:03:53: OGRE EXCEPTION(3:RenderingAPIException): Fixed Function pipeline is no longer allowed nor supported. The material scene::Material(65518) must use shaders in HlmsLowLevel::calculateHashFor at /tmp/ogre2.3-20240920-18264-919rfb/ogre-next-2.3.1/OgreMain/src/OgreHlmsLowLevel.cpp (line 163)
23:03:53: Couldn't apply datablock '[Hash 0x1dc5a795]' to this renderable. Using default one. Check previous log messages to see if there's more information.
23:03:53: OGRE EXCEPTION(3:RenderingAPIException): Fixed Function pipeline is no longer allowed nor supported. The material scene::Material(65518) must use shaders in HlmsLowLevel::calculateHashFor at /tmp/ogre2.3-20240920-18264-919rfb/ogre-next-2.3.1/OgreMain/src/OgreHlmsLowLevel.cpp (line 163)
23:03:53: OGRE EXCEPTION(3:RenderingAPIException): Fixed Function pipeline is no longer allowed nor supported. The material scene::Material(65518) must use shaders in HlmsLowLevel::calculateHashFor at /tmp/ogre2.3-20240920-18264-919rfb/ogre-next-2.3.1/OgreMain/src/OgreHlmsLowLevel.cpp (line 163)
23:03:53: Couldn't apply datablock '[Hash 0x1dc5a795]' to this renderable. Using default one. Check previous log messages to see if there's more information.
23:03:53: Can't assign material scene::Material(65458) because this Material does not exist. Have you forgotten to define it in a .material script?
23:03:53: OGRE EXCEPTION(3:RenderingAPIException): Fixed Function pipeline is no longer allowed nor supported. The material Default/TransGreen must use shaders in HlmsLowLevel::calculateHashFor at /tmp/ogre2.3-20240920-18264-919rfb/ogre-next-2.3.1/OgreMain/src/OgreHlmsLowLevel.cpp (line 163)
23:03:53: OGRE EXCEPTION(3:RenderingAPIException): Fixed Function pipeline is no longer allowed nor supported. The material Default/TransGreen must use shaders in HlmsLowLevel::calculateHashFor at /tmp/ogre2.3-20240920-18264-919rfb/ogre-next-2.3.1/OgreMain/src/OgreHlmsLowLevel.cpp (line 163)
23:03:53: Couldn't apply datablock '[Hash 0x1a9fb58f]' to this renderable. Using default one. Check previous log messages to see if there's more information.
23:03:53: Shader 100000000VertexShader_vs compiled successfully.
23:03:53: Shader 100000001VertexShader_vs compiled successfully.
23:03:53: Shader 100000001PixelShader_ps compiled successfully.
23:03:53: Shader 100000002VertexShader_vs compiled successfully.
23:03:53: Shader 100000002PixelShader_ps compiled successfully.
23:03:53: WARNING: Deleting mapped buffer without having it unmapped. This is often sign of a resource leak or a bad pattern. Umapping the buffer for you...
23:03:53: WARNING: Deleting mapped buffer without having it unmapped. This is often sign of a resource leak or a bad pattern. Umapping the buffer for you...
23:03:53: WARNING: Deleting mapped buffer without having it unmapped. This is often sign of a resource leak or a bad pattern. Umapping the buffer for you...
23:03:53: WARNING: Deleting mapped buffer without having it unmapped. This is often sign of a resource leak or a bad pattern. Umapping the buffer for you...
Another note, I’m running into an issue when running glxinfo (could indicate a driver issue?)
% glxinfo | grep "OpenGL version"
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 129 (Apple-DRI)
Minor opcode of failed request: 2 ()
Value in failed request: 0x600003
Serial number of failed request: 22
Current serial number in output stream: 22
It’s difficult to tell what’s causing the render issue from the logs alone, but it looks as if Gazebo is running from a version installed using brew
23:03:53: Added resource location '/usr/local/Cellar/gz-rendering10/10.0.0_2/share/gz/gz-rendering/media/materials/textures/' of type 'FileSystem' to resource group 'General'
Have you tried installing Gazebo from source, and building the plugin against that? The brew versions will need to be uninstalled first to ensure there are no library conflicts. Keep the ogre2.3.1 library though. I don’t use the OSRF prebuilt libraries for macOS as I prefer to be able to step through the Gazebo code when developing against it. It could be there are some library mismatches between the current brew versions and the osrf tap containing Gazebo as they are not maintained lockstep (AFAIK). If the plugin is using an incompatible library when it is built this may be a source of error.
Ohh, some insight from ~/.gz/rendering/ogre2.log
I have not updated brew recently but we both appear to be using ogre2.3.1.
Yours:
23:03:53: OGRE EXCEPTION(3:RenderingAPIException): Fixed Function pipeline is no longer allowed nor supported. The material Default/TransGreen must use shaders in HlmsLowLevel::calculateHashFor at /tmp/ogre2.3-20240920-18264-919rfb/ogre-next-2.3.1/OgreMain/src/OgreHlmsLowLevel.cpp (line 163)
Mine:
16:21:56: OGRE EXCEPTION(3:RenderingAPIException): Fixed Function pipeline is no longer allowed nor supported. The material Default/TransGreen must use shaders in HlmsLowLevel::calculateHashFor at /tmp/ogre2.3-20230918-50912-1bncm6p/ogre-next-2.3.1/OgreMain/src/OgreHlmsLowLevel.cpp (line 163)
There is a lot of noise from the Ogre2 render engine. These warnings are not fatal (am seeing the same warnings in my ogre2.log).
Another note, I’m running into an issue when running glxinfo (could indicate a driver issue?)
When running on macOS Gazebo will be using the Metal render engine, so OpenGL tools such as glxinfo are not that relevant (Apple dropped support for OpenGL some time ago).
I have not tried installing Gazebo from source. I’ll try that next.
On my end, the terminal session clearly ends while the Gazebo window sometimes hangs, empty. When I go to close the window, there’s terminal output again, as if there was a background process. Have you found Gazebo to be the easiest or most scalable world sim to integrate with Ardupilot? Any preferences for Mac?
It does what I need for ArduPilot, and runs well on macOS in a from source build (I added the support for the Metal render pipeline to Gazebo - so I know that it works).
It really depends on what you are trying to do. I am interested in a simulator where I have full control over the physics and can simulate almost any vehicle ArduPilot can manage. This includes copters, planes, quadplanes, rovers, walking robots, boats, sailboats etc., and interactions between these and other things
For photo-realistic environments or other features there other simulators that may be better, but at some point if it’s closed source or limited to a particular platform then you can get stuck.