Graal: [native-image] -H:CLibraryPath not searched for header files

Created on 5 Feb 2019  路  3Comments  路  Source: oracle/graal

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.

native-image

Most helpful comment

FYI: I had the same issue locally and fixed it by running:

sudo apt install zlib1g-dev

All 3 comments

@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
Was this page helpful?
0 / 5 - 0 ratings