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)
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