graalvm 0.31 and R language

Created on 24 Feb 2018  路  3Comments  路  Source: oracle/graal

There seems to be some issue with the R language.

Operating System: RHEL7

Sample Code: Test.java

import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;

import org.graalvm.polyglot.Context;
import org.graalvm.polyglot.Value;

public class Test {
    public static void main(String[] args) {
        ByteArrayOutputStream yourOutput = new ByteArrayOutputStream();
        Context context = Context.newBuilder()
                .out(yourOutput)
                .err(yourOutput)
                .build();
        StringBuffer stringBuffer = new StringBuffer();
        Value evalValue = context.eval("R","print('Hello polyglot world R!');");
        try {
            stringBuffer.append("Output: ").append(yourOutput.toString("UTF-8")).append("<br/>");
            stringBuffer.append("Result type:  ").append(evalValue.getMetaObject()).append("<br/>");
            stringBuffer.append("Result value:  ").append(evalValue).append("<br/>");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        yourOutput.reset();
        System.out.println(stringBuffer.toString());
    }
}

Build and while running it throws an exception

sh-4.2$ /opt/app-root/graalvm-0.31/bin/javac Test.java

sh-4.2$ /opt/app-root/graalvm-0.31/bin/java Test 
Exception in thread "main" org.graalvm.polyglot.PolyglotException: java.lang.UnsatisfiedLinkError: libgomp.so.1: cannot open shared object file: No such file or directory
        at com.oracle.truffle.nfi.impl.NFIContext.loadLibrary(Native Method)
        at com.oracle.truffle.nfi.impl.NFIContext.loadLibrary(NFIContext.java:147)
        at com.oracle.truffle.nfi.impl.NFILanguageImpl$LoadLibraryNode.execute(NFILanguageImpl.java:89)
        at <native> null(Unknown)
        at    <nfi> null(Unknown)
        at      <R> null(Unknown)
        at org.graalvm.polyglot.Context.eval(Context.java:185)
        at Test.main(Test.java:15)
Original Internal Error:
java.lang.UnsatisfiedLinkError: libgomp.so.1: cannot open shared object file: No such file or directory
        at com.oracle.truffle.nfi.impl.NFIContext.loadLibrary(Native Method)
        at com.oracle.truffle.nfi.impl.NFIContext.loadLibrary(NFIContext.java:147)
        at com.oracle.truffle.nfi.impl.NFILanguageImpl$LoadLibraryNode.execute(NFILanguageImpl.java:89)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callProxy(OptimizedCallTarget.java:245)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callRoot(OptimizedCallTarget.java:234)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:224)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.doInvoke(OptimizedCallTarget.java:209)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:192)
        at org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.callProxy(OptimizedDirectCallNode.java:81)
        at org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:65)
        at com.oracle.truffle.nfi.NFIRootNode.execute(NFIRootNode.java:81)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callProxy(OptimizedCallTarget.java:245)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callRoot(OptimizedCallTarget.java:234)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:224)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.doInvoke(OptimizedCallTarget.java:209)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:185)
        at com.oracle.truffle.r.ffi.impl.nfi.TruffleNFI_DLL$TruffleNFI_DLOpenNode.execute(TruffleNFI_DLL.java:60)
        at com.oracle.truffle.r.runtime.ffi.DLLRFFI$DLOpenRootNode.execute(DLLRFFI.java:86)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callProxy(OptimizedCallTarget.java:245)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callRoot(OptimizedCallTarget.java:234)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:224)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.doInvoke(OptimizedCallTarget.java:209)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:185)
        at com.oracle.truffle.r.runtime.ffi.DLL.loadLibR(DLL.java:437)
        at com.oracle.truffle.r.ffi.impl.nfi.TruffleNFI_Context.initialize(TruffleNFI_Context.java:285)
        at com.oracle.truffle.r.runtime.context.RContext.initializeContext(RContext.java:517)
        at com.oracle.truffle.r.engine.TruffleRLanguageImpl.initializeContext(TruffleRLanguageImpl.java:109)
        at com.oracle.truffle.r.engine.TruffleRLanguageImpl.initializeContext(TruffleRLanguageImpl.java:59)
        at com.oracle.truffle.api.TruffleLanguage$Env.postInit(TruffleLanguage.java:1639)
        at com.oracle.truffle.api.TruffleLanguage$LanguageImpl.postInitEnv(TruffleLanguage.java:1820)
        at com.oracle.truffle.api.vm.PolyglotLanguageContext.ensureInitialized(PolyglotLanguageContext.java:268)
        at com.oracle.truffle.api.vm.PolyglotLanguageContext.parseCached(PolyglotLanguageContext.java:109)
        at com.oracle.truffle.api.vm.PolyglotContextImpl.eval(PolyglotContextImpl.java:745)
        at org.graalvm.polyglot.Context.eval(Context.java:169)
        at org.graalvm.polyglot.Context.eval(Context.java:185)
        at Test.main(Test.java:15)
Caused by: com.oracle.truffle.api.TruffleStackTrace$LazyStackTrace
Caused by: com.oracle.truffle.api.TruffleStackTrace
        at com.oracle.truffle.api.TruffleStackTrace.fillIn(TruffleStackTrace.java:170)
        at com.oracle.truffle.api.TruffleStackTrace.addStackFrameInfo(TruffleStackTrace.java:233)
        at com.oracle.truffle.api.TruffleLanguage$LanguageImpl.onThrowable(TruffleLanguage.java:1845)
        at com.oracle.truffle.api.impl.TVMCI.onThrowable(TVMCI.java:177)
        at org.graalvm.compiler.truffle.runtime.GraalTVMCI.onThrowable(GraalTVMCI.java:112)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callProxy(OptimizedCallTarget.java:250)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callRoot(OptimizedCallTarget.java:234)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:224)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.doInvoke(OptimizedCallTarget.java:209)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:192)
        at org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.callProxy(OptimizedDirectCallNode.java:81)
        at org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:65)
        at com.oracle.truffle.nfi.NFIRootNode.execute(NFIRootNode.java:81)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callProxy(OptimizedCallTarget.java:245)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callRoot(OptimizedCallTarget.java:234)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:224)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.doInvoke(OptimizedCallTarget.java:209)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:185)
        at com.oracle.truffle.r.ffi.impl.nfi.TruffleNFI_DLL$TruffleNFI_DLOpenNode.execute(TruffleNFI_DLL.java:60)
        at com.oracle.truffle.r.runtime.ffi.DLLRFFI$DLOpenRootNode.execute(DLLRFFI.java:86)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callProxy(OptimizedCallTarget.java:245)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callRoot(OptimizedCallTarget.java:234)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:224)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.doInvoke(OptimizedCallTarget.java:209)
        at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:185)
        at com.oracle.truffle.r.runtime.ffi.DLL.loadLibR(DLL.java:437)
        at com.oracle.truffle.r.ffi.impl.nfi.TruffleNFI_Context.initialize(TruffleNFI_Context.java:285)
        at com.oracle.truffle.r.runtime.context.RContext.initializeContext(RContext.java:517)
        at com.oracle.truffle.r.engine.TruffleRLanguageImpl.initializeContext(TruffleRLanguageImpl.java:109)
        at com.oracle.truffle.r.engine.TruffleRLanguageImpl.initializeContext(TruffleRLanguageImpl.java:59)
        at com.oracle.truffle.api.TruffleLanguage$Env.postInit(TruffleLanguage.java:1639)
        at com.oracle.truffle.api.TruffleLanguage$LanguageImpl.postInitEnv(TruffleLanguage.java:1820)
        at com.oracle.truffle.api.vm.PolyglotLanguageContext.ensureInitialized(PolyglotLanguageContext.java:268)
        at com.oracle.truffle.api.vm.PolyglotLanguageContext.parseCached(PolyglotLanguageContext.java:109)
        at com.oracle.truffle.api.vm.PolyglotContextImpl.eval(PolyglotContextImpl.java:745)
        at org.graalvm.polyglot.Context.eval(Context.java:169)
        at org.graalvm.polyglot.Context.eval(Context.java:185)
        at Test.main(Test.java:15)
bug r

All 3 comments

Your system is probably missing the OpenMP runtime library. Fix could be to install e.g. GCC, which should include that library.

I have created a docker image for graalvm. I have installed gcc as part of the docker image. After installing gcc, R was running fine.

May be we can add it somewhere in documentation that OpenMP runtime library installation is required for R library to work. Thanks for the quick solution.

The requirements are now documented [1] and the error messages now also contains hints for troubleshooting common problems including this one.

[1] http://www.graalvm.org/docs/reference-manual/languages/r

Was this page helpful?
0 / 5 - 0 ratings