I am trying to use native-image on a build server where gcc is installed but zlib headers are not present and I currently have no root permissions to install the zlib-devel rpm package. So I downloaded the zlib.h headers via:
git clone https://github.com/madler/zlib /tmp/zlib
and invoked native-image with:
graalvm-ce-1.0.0-rc12/bin/native-image -H:CLibraryPath=/tmp/zlib/ --no-server --verbose -cp myapp-1.0.0-SNAPSHOT-fat.jar myapp.Main myapp
However it still fails with:
Executing [
/tmp/graalvm-ce-1.0.0-rc12/bin/java \
-XX:+UnlockExperimentalVMOptions \
-XX:+EnableJVMCI \
-XX:-UseJVMCICompiler \
-Dtruffle.TrustAllTruffleRuntimeProviders=true \
-d64 \
-XX:-UseJVMCIClassLoader \
-Xss10m \
-Xmx804867272 \
-Duser.country=US \
-Duser.language=en \
-Dgraalvm.version=1.0.0-rc12 \
-Dorg.graalvm.version=1.0.0-rc12 \
-Dcom.oracle.graalvm.isaot=true \
-Djvmci.class.path.append=/tmp/graalvm-ce-1.0.0-rc12/jre/lib/jvmci/graal.jar \
-Xms804867272 \
-Xbootclasspath/a:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/boot/graal-sdk.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/boot/graaljs-scriptengine.jar \
-cp \
/tmp/graalvm-ce-1.0.0-rc12/jre/lib/svm/builder/svm.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/svm/builder/objectfile.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/svm/builder/pointsto.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/jvmci/graal.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/jvmci/graal-management.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/jvmci/jvmci-api.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/jvmci/jvmci-hotspot.jar \
com.oracle.svm.hosted.NativeImageGeneratorRunner \
-watchpid \
21089 \
-imagecp \
/tmp/graalvm-ce-1.0.0-rc12/jre/lib/boot/graal-sdk.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/boot/graaljs-scriptengine.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/svm/builder/svm.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/svm/builder/objectfile.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/svm/builder/pointsto.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/jvmci/graal.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/jvmci/graal-management.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/jvmci/jvmci-api.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/jvmci/jvmci-hotspot.jar:/tmp/graalvm-ce-1.0.0-rc12/jre/lib/svm/library-support.jar:/tmp/myapp-2.0.0-SNAPSHOT-fat.jar \
-H:Path=/tmp \
-H:+ReportExceptionStackTraces \
-H:CLibraryPath=/tmp/graalvm-ce-1.0.0-rc12/jre/lib/svm/clibraries/linux-amd64,/tmp/zlib \
-H:Class=myapp.Main \
-H:Name=myapp
]
[myapp:21090] classlist: 3,178.35 ms
[myapp:21090] (cap): 526.50 ms
[myapp:21090] setup: 1,034.50 ms
Error: Basic header file missing (<zlib.h>). Make sure headers are available on your system.
com.oracle.svm.core.util.UserError$UserException: Basic header file missing (<zlib.h>). Make sure headers are available on your system.
at com.oracle.svm.core.util.UserError.abort(UserError.java:67)
at com.oracle.svm.hosted.c.CAnnotationProcessor.reportCompilerError(CAnnotationProcessor.java:138)
at com.oracle.svm.hosted.c.codegen.CCompilerInvoker.compileAndParseError(CCompilerInvoker.java:74)
at com.oracle.svm.hosted.c.CAnnotationProcessor.compileQueryCode(CAnnotationProcessor.java:131)
at com.oracle.svm.hosted.c.CAnnotationProcessor.process(CAnnotationProcessor.java:84)
at com.oracle.svm.hosted.c.NativeLibraries.finish(NativeLibraries.java:306)
at com.oracle.svm.hosted.NativeImageGenerator.processNativeLibraryImports(NativeImageGenerator.java:1414)
at com.oracle.svm.hosted.NativeImageGenerator.setupNativeLibraries(NativeImageGenerator.java:958)
at com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:800)
at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:490)
at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:410)
at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error: Image building with exit status 1
Is there any other way to provide additional search paths for header files?
I also tried graal RC11 and RC10 with the same result.
@olpaw is there any alternative way to specify additional search locations for header files?
FYI: I had the same issue locally and fixed it by running:
sudo apt install zlib1g-dev
We now have:
-H:CCompilerOption=... Provide custom C compiler option used for query code compilation. Default: None
-H:CCompilerPath=... Provide custom path to C compiler used for query code compilation and linking. Default: None
Most helpful comment
FYI: I had the same issue locally and fixed it by running: