MacOS BigSur下编译Graal Native Image报错求助:函数未返回NSString
macOS BigSur 下 Graal Native Image 编译失败问题解决
问题背景
在macOS BigSur系统中执行./gradlew nativeCompile编译Graal Native Image时失败,核心错误为function does not return NSString。
环境信息
java -version openjdk version "17.0.5" 2022-10-18 OpenJDK Runtime Environment GraalVM CE 22.3.0 (build "17.0.5+8-jvmci-22.3-b08") OpenJDK 64-Bit Server VM GraalVM CE 22.3.0 (build "17.0.5+8-jvmci-22.3-b08", mixed mode, sharing) native-image --version GraalVM 22.3.0 Java 17 CE (Java Version "17.0.5+8-jvmci-22.3-b08")
报错信息
执行编译命令后直接报错:
Error: Error compiling query code (in /var/folders/zr/ctjr8g2574ggz5xjzrd6jyxw0000gn/T/SVM-4935784945826410470/PosixDirectives.c). Compiler command '/usr/bin/cc -Wall -Werror -Wno-tautological-compare -ObjC -o /var/folders/zr/ctjr8g2574ggz5xjzrd6jyxw0000gn/T/SVM-4935784945826410470/PosixDirectives /var/folders/zr/ctjr8g2574ggz5xjzrd6jyxw0000gn/T/SVM-4935784945826410470/PosixDirectives.c' output included error: /Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSBundle.h:91:143: error: function does not return NSString Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception
添加-H:+ReportExceptionStackTraces参数后,堆栈信息未提供额外有效内容,核心错误不变:
Error: Error compiling query code (in /var/folders/zr/ctjr8g2574ggz5xjzrd6jyxw0000gn/T/SVM-17577305799927673130/PosixDirectives.c). Compiler command '/usr/bin/cc -Wall -Werror -Wno-tautological-compare -ObjC -o /var/folders/zr/ctjr8g2574ggz5xjzrd6jyxw0000gn/T/SVM-17577305799927673130/PosixDirectives /var/folders/zr/ctjr8g2574ggz5xjzrd6jyxw0000gn/T/SVM-17577305799927673130/PosixDirectives.c' output included error: /Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSBundle.h:91:143: error: function does not return NSString com.oracle.svm.core.util.UserError$UserException: Error compiling query code (in /var/folders/zr/ctjr8g2574ggz5xjzrd6jyxw0000gn/T/SVM-17577305799927673130/PosixDirectives.c). Compiler command '/usr/bin/cc -Wall -Werror -Wno-tautological-compare -ObjC -o /var/folders/zr/ctjr8g2574ggz5xjzrd6jyxw0000gn/T/SVM-17577305799927673130/PosixDirectives /var/folders/zr/ctjr8g2574ggz5xjzrd6jyxw0000gn/T/SVM-17577305799927673130/PosixDirectives.c' output included error: /Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSBundle.h:91:143: error: function does not return NSString at org.graalvm.nativeimage.builder/com.oracle.svm.core.util.UserError.abort(UserError.java:139) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.c.NativeLibraries.reportErrors(NativeLibraries.java:371) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.processNativeLibraryImports(NativeImageGenerator.java:1715) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.setupNativeLibraries(NativeImageGenerator.java:1121) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:915) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:575) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:535) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:403) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:580) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:128)
解决方法
匹配SDK版本:macOS BigSur对应的是MacOSX11.x系列SDK,当前使用的MacOSX12.1.sdk属于Monterey系统,版本不兼容导致编译错误。操作步骤:
- 查看已安装的SDK:
xcodebuild -showsdks - 设置环境变量指定对应SDK:
export SDKROOT=$(xcrun --show-sdk-path --sdk macosx11.7)(替换为实际存在的BigSur版本SDK) - 重新执行编译命令
- 查看已安装的SDK:
升级GraalVM版本:GraalVM 22.3.0可能存在BigSur平台的兼容性问题,升级到23.x及以上版本(如23.1.0),新版本通常修复了这类平台适配问题。
临时绕过工具链检查:若需快速验证,可添加编译参数
-H:-CheckToolchain跳过工具链检查,但这只是临时方案,建议优先解决SDK版本匹配问题。
内容的提问来源于stack exchange,提问作者user432024
相关产品推荐
相关产品推荐

