Testing new iOS backend
jMonkeyEngine Hub
June 17, 2026
That did the trick now having link errors:
> Task :ios-graalvm:buildUsercode
native-image executable path: /Users/joliver/RailRacer/build/libjglios/third_party/graalvm-host/liberica-nik-23.1.3-macos-amd64/lib/svm/bin/native-image
native-image --version: native-image 21.0.3 2024-04-16
GraalVM Runtime Environment Liberica-NIK-23.1.3-1 (build 21.0.3+10-LTS)
Substrate VM Liberica-NIK-23.1.3-1 (build 21.0.3+10-LTS, serial gc)
selected target: iphoneos-arm64
CAP cache dir: /Users/joliver/RailRacer/build/libjglios/third_party/graalvm/iphoneos-arm64/cap
libjava path: /Users/joliver/RailRacer/build/libjglios/third_party/graalvm/iphoneos-arm64/libjava-release.a
libjvm path: /Users/joliver/RailRacer/build/libjglios/third_party/graalvm/iphoneos-arm64/libjvm-release.a
iOS SDK path: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.3.sdk
clang path: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
Apple target triple: arm64-apple-ios12.0
> Task :ios-graalvm:archiveUsercode
Archived Graal device usercode: /Users/joliver/RailRacer/ios-graalvm/build/libs/ios-graal-device/usercode.a
> Task :ios-graalvm:linkApp
Generated 535 weak JNI link stubs: /Users/joliver/RailRacer/ios-graalvm/build/tmp/linkApp/weak-jni-stubs.cpp
Compiled iOS app icon from /Users/joliver/RailRacer/ios-graalvm/resources/railracer-icon.png
Copied 1 iOS asset path(s) into /Users/joliver/RailRacer/ios-graalvm/build/ios-graal-device/RailRacer.app
ld: warning: object file (/Users/joliver/RailRacer/ios-graalvm/build/libjglios/ios-framework-classpath/device/26-libjglios-core-ios-0.6.jar/lib/ios/libJGLIOSCore.xcframework/ios-arm64/libJGLIOSCore.framework/libJGLIOSCore(0-libjglios_ios_app.mm.o)) was built for newer iOS version (15.0) than being linked (12.0)
ld: warning: object file (/Users/joliver/RailRacer/ios-graalvm/build/libjglios/ios-framework-classpath/device/26-libjglios-core-ios-0.6.jar/lib/ios/libJGLIOSCore.xcframework/ios-arm64/libJGLIOSCore.framework/libJGLIOSCore(1-libjglios_ios_launcher.mm.o)) was built for newer iOS version (15.0) than being linked (12.0)
ld: warning: object file (/Users/joliver/RailRacer/ios-graalvm/build/libjglios/ios-framework-classpath/device/26-libjglios-core-ios-0.6.jar/lib/ios/libJGLIOSCore.xcframework/ios-arm64/libJGLIOSCore.framework/libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)) was built for newer iOS version (15.0) than being linked (12.0)
ld: warning: object file (/Users/joliver/RailRacer/ios-graalvm/build/libjglios/ios-framework-classpath/device/27-libjglios-gles-ios-0.6.jar/lib/ios/libJGLIOSGLES.xcframework/ios-arm64/libJGLIOSGLES.framework/libJGLIOSGLES(0-jni_gles.mm.o)) was built for newer iOS version (15.0) than being linked (12.0)
ld: warning: object file (/Users/joliver/RailRacer/ios-graalvm/build/libjglios/ios-framework-classpath/device/28-libjglios-sdl3-ios-0.6.jar/lib/ios/libJGLIOSSdl3.xcframework/ios-arm64/libJGLIOSSdl3.framework/libJGLIOSSdl3(0-jni_sdl3.mm.o)) was built for newer iOS version (15.0) than being linked (12.0)
ld: warning: object file (/Users/joliver/RailRacer/ios-graalvm/build/libjglios/ios-framework-classpath/device/29-libjglios-openal-ios-0.6.jar/lib/ios/libJGLIOSOpenAL.xcframework/ios-arm64/libJGLIOSOpenAL.framework/libJGLIOSOpenAL(0-jni_openal_ios.mm.o)) was built for newer iOS version (15.0) than being linked (12.0)
Undefined symbols for architecture arm64:
"_objc_msgSend$UTF8String", referenced from:
_setOSNameAndVersion in libjava-release.a(libjava.a-arm64-master.o)
_systemVersionPlatformImpl in libjvm-release.a(foundation.o)
"_objc_msgSend$actionWithTitle:style:handler:", referenced from:
____ZN12_GLOBAL__N_126libjglios_show_error_alertEPKcS1__block_invoke in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$addAction:", referenced from:
____ZN12_GLOBAL__N_126libjglios_show_error_alertEPKcS1__block_invoke in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$alertControllerWithTitle:message:preferredStyle:", referenced from:
____ZN12_GLOBAL__N_126libjglios_show_error_alertEPKcS1__block_invoke in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$arrayWithObjects:count:", referenced from:
_libjglios_device_rumble in libJGLIOSCore(1-libjglios_ios_launcher.mm.o)
"_objc_msgSend$bounds", referenced from:
_SDL_AppInit in libJGLIOSCore(0-libjglios_ios_app.mm.o)
update_framebuffer_size(SDL_Window*, CAMetalLayer*, UIScreen*, int, int) in libJGLIOSCore(0-libjglios_ios_app.mm.o)
"_objc_msgSend$cancelAndReturnError:", referenced from:
_libjglios_device_stop_rumble in libJGLIOSCore(1-libjglios_ios_launcher.mm.o)
_libjglios_device_rumble in libJGLIOSCore(1-libjglios_ios_launcher.mm.o)
"_objc_msgSend$capabilitiesForHardware", referenced from:
_libjglios_device_rumble_supported in libJGLIOSCore(1-libjglios_ios_launcher.mm.o)
"_objc_msgSend$contentsScale", referenced from:
positive_display_scale(UIScreen*, CAMetalLayer*) in libJGLIOSCore(0-libjglios_ios_app.mm.o)
"_objc_msgSend$countByEnumeratingWithState:objects:count:", referenced from:
(anonymous namespace)::libjglios_top_view_controller() in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$createPlayerWithPattern:error:", referenced from:
_libjglios_device_rumble in libJGLIOSCore(1-libjglios_ios_launcher.mm.o)
"_objc_msgSend$currentRunLoop", referenced from:
____ZN12_GLOBAL__N_126libjglios_show_error_alertEPKcS1__block_invoke in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$dateWithTimeIntervalSinceNow:", referenced from:
____ZN12_GLOBAL__N_126libjglios_show_error_alertEPKcS1__block_invoke in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$delegate", referenced from:
_SDL_AppInit in libJGLIOSCore(0-libjglios_ios_app.mm.o)
update_framebuffer_size(SDL_Window*, CAMetalLayer*, UIScreen*, int, int) in libJGLIOSCore(0-libjglios_ios_app.mm.o)
"_objc_msgSend$dictionaryWithContentsOfFile:", referenced from:
_setOSNameAndVersion in libjava-release.a(libjava.a-arm64-master.o)
_systemVersionPlatformImpl in libjvm-release.a(foundation.o)
"_objc_msgSend$drain", referenced from:
_setUserHome in libjava-release.a(libjava.a-arm64-master.o)
"_objc_msgSend$drawableSize", referenced from:
update_framebuffer_size(SDL_Window*, CAMetalLayer*, UIScreen*, int, int) in libJGLIOSCore(0-libjglios_ios_app.mm.o)
"_objc_msgSend$fileSystemRepresentation", referenced from:
_Java_org_ngengine_libjglios_core_LibJGLIOSBundleBridge_resourcePath in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$getReturnValue:", referenced from:
_setOSNameAndVersion in libjava-release.a(libjava.a-arm64-master.o)
"_objc_msgSend$init", referenced from:
_setUserHome in libjava-release.a(libjava.a-arm64-master.o)
"_objc_msgSend$initAndReturnError:", referenced from:
_libjglios_device_rumble in libJGLIOSCore(1-libjglios_ios_launcher.mm.o)
"_objc_msgSend$initWithEventType:parameters:relativeTime:duration:", referenced from:
_libjglios_device_rumble in libJGLIOSCore(1-libjglios_ios_launcher.mm.o)
"_objc_msgSend$initWithEvents:parameters:error:", referenced from:
_libjglios_device_rumble in libJGLIOSCore(1-libjglios_ios_launcher.mm.o)
"_objc_msgSend$initWithParameterID:value:", referenced from:
_libjglios_device_rumble in libJGLIOSCore(1-libjglios_ios_launcher.mm.o)
"_objc_msgSend$invocationWithMethodSignature:", referenced from:
_setOSNameAndVersion in libjava-release.a(libjava.a-arm64-master.o)
"_objc_msgSend$invokeWithTarget:", referenced from:
_setOSNameAndVersion in libjava-release.a(libjava.a-arm64-master.o)
"_objc_msgSend$isKeyWindow", referenced from:
(anonymous namespace)::libjglios_top_view_controller() in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$isMainThread", referenced from:
(anonymous namespace)::libjglios_show_error_alert(char const*, char const*) in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$keyWindow", referenced from:
(anonymous namespace)::libjglios_top_view_controller() in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$length", referenced from:
_Java_org_ngengine_libjglios_core_LibJGLIOSBundleBridge_resourcePath in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$mainBundle", referenced from:
_Java_org_ngengine_libjglios_core_LibJGLIOSBundleBridge_resourcePath in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$mainScreen", referenced from:
_SDL_AppInit in libJGLIOSCore(0-libjglios_ios_app.mm.o)
_SDL_AppEvent in libJGLIOSCore(0-libjglios_ios_app.mm.o)
"_objc_msgSend$methodSignatureForSelector:", referenced from:
_setOSNameAndVersion in libjava-release.a(libjava.a-arm64-master.o)
"_objc_msgSend$nativeScale", referenced from:
positive_display_scale(UIScreen*, CAMetalLayer*) in libJGLIOSCore(0-libjglios_ios_app.mm.o)
"_objc_msgSend$objectForKey:", referenced from:
_setOSNameAndVersion in libjava-release.a(libjava.a-arm64-master.o)
_systemVersionPlatformImpl in libjvm-release.a(foundation.o)
"_objc_msgSend$operatingSystemVersion", referenced from:
_operatingSystemVersion in libjvm-release.a(foundation.o)
"_objc_msgSend$presentViewController:animated:completion:", referenced from:
____ZN12_GLOBAL__N_126libjglios_show_error_alertEPKcS1__block_invoke in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$presentedViewController", referenced from:
(anonymous namespace)::libjglios_top_view_controller() in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$processInfo", referenced from:
_setOSNameAndVersion in libjava-release.a(libjava.a-arm64-master.o)
_operatingSystemVersion in libjvm-release.a(foundation.o)
"_objc_msgSend$resourcePath", referenced from:
_Java_org_ngengine_libjglios_core_LibJGLIOSBundleBridge_resourcePath in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$respondsToSelector:", referenced from:
_setOSNameAndVersion in libjava-release.a(libjava.a-arm64-master.o)
"_objc_msgSend$rootViewController", referenced from:
(anonymous namespace)::libjglios_top_view_controller() in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$runMode:beforeDate:", referenced from:
____ZN12_GLOBAL__N_126libjglios_show_error_alertEPKcS1__block_invoke in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$scale", referenced from:
positive_display_scale(UIScreen*, CAMetalLayer*) in libJGLIOSCore(0-libjglios_ios_app.mm.o)
"_objc_msgSend$setAutoShutdownEnabled:", referenced from:
_libjglios_device_rumble in libJGLIOSCore(1-libjglios_ios_launcher.mm.o)
"_objc_msgSend$setBounds:", referenced from:
_SDL_AppInit in libJGLIOSCore(0-libjglios_ios_app.mm.o)
update_framebuffer_size(SDL_Window*, CAMetalLayer*, UIScreen*, int, int) in libJGLIOSCore(0-libjglios_ios_app.mm.o)
"_objc_msgSend$setContentsScale:", referenced from:
_SDL_AppInit in libJGLIOSCore(0-libjglios_ios_app.mm.o)
update_framebuffer_size(SDL_Window*, CAMetalLayer*, UIScreen*, int, int) in libJGLIOSCore(0-libjglios_ios_app.mm.o)
"_objc_msgSend$setDrawableSize:", referenced from:
_SDL_AppInit in libJGLIOSCore(0-libjglios_ios_app.mm.o)
update_framebuffer_size(SDL_Window*, CAMetalLayer*, UIScreen*, int, int) in libJGLIOSCore(0-libjglios_ios_app.mm.o)
"_objc_msgSend$setFrame:", referenced from:
_SDL_AppInit in libJGLIOSCore(0-libjglios_ios_app.mm.o)
update_framebuffer_size(SDL_Window*, CAMetalLayer*, UIScreen*, int, int) in libJGLIOSCore(0-libjglios_ios_app.mm.o)
"_objc_msgSend$setPlaysHapticsOnly:", referenced from:
_libjglios_device_rumble in libJGLIOSCore(1-libjglios_ios_launcher.mm.o)
"_objc_msgSend$setSelector:", referenced from:
_setOSNameAndVersion in libjava-release.a(libjava.a-arm64-master.o)
"_objc_msgSend$sharedApplication", referenced from:
(anonymous namespace)::libjglios_top_view_controller() in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$startAndReturnError:", referenced from:
_libjglios_device_rumble in libJGLIOSCore(1-libjglios_ios_launcher.mm.o)
"_objc_msgSend$startAtTime:error:", referenced from:
_libjglios_device_rumble in libJGLIOSCore(1-libjglios_ios_launcher.mm.o)
"_objc_msgSend$stringWithFormat:", referenced from:
_setOSNameAndVersion in libjava-release.a(libjava.a-arm64-master.o)
"_objc_msgSend$stringWithUTF8String:", referenced from:
(anonymous namespace)::libjglios_show_error_alert(char const*, char const*) in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
"_objc_msgSend$supportsHaptics", referenced from:
_libjglios_device_rumble_supported in libJGLIOSCore(1-libjglios_ios_launcher.mm.o)
"_objc_msgSend$window", referenced from:
update_framebuffer_size(SDL_Window*, CAMetalLayer*, UIScreen*, int, int) in libJGLIOSCore(0-libjglios_ios_app.mm.o)
"_objc_msgSend$windows", referenced from:
(anonymous namespace)::libjglios_top_view_controller() in libJGLIOSCore(2-libjglios_ios_launcher_jni.mm.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Maybe the issue is only related to the “was built for newer iOS version (15.0) than being linked (12.0)” or to anything in my project. I have to leave for a while, so I’ll have a deep look at them later today
Discussion in the ATmosphere