【问题标题】:Problem with installing R packages in GraalVM在 GraalVM 中安装 R 包的问题
【发布时间】:2020-05-06 22:49:03
【问题描述】:

我已经在 MacOS Catalina 上安装了 graalvm-ce-java8-20.0.0。我可以从 java 运行简单的 R 代码:

    Context context = Context.newBuilder("js").allowAllAccess(true).build();
    Context.newBuilder().allowNativeAccess(true).build();
    Set<String> languages = context.getEngine().getLanguages().keySet();
    System.out.println("Current Languages available in GraalVM: " + languages);
    context.eval("js","print('JavaScript: Hello World')");

    Context rcontext = Context.newBuilder("R")
            .allowAllAccess(true)
            .allowHostClassLoading(true)
            .allowIO(true)
            .allowNativeAccess(true)
            .allowCreateThread(true)
            .build();
    rcontext.eval("R", "print('R: Hello World');");
    int result = rcontext.eval("R", "sum").execute(new int[] {3,4,5}).asInt();
    System.out.println("result: " + result);

当我尝试安装几乎所有 R 库时,例如。 rcpp:

    source = Source.create("R", "install.packages(\"Rcpp\");");
    String text = rcontext.eval(source).asString();

我遇到以下错误:

>  installing to
> /Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs
>     ** R
>     ** inst
>     ** byte-compile and prepare package for lazy loading
>     ** help
>     *** installing help indices
>     ** building package indices
>     ** installing vignettes
>     ** testing if installed package can be loaded from temporary location
    com.oracle.truffle.r.runtime.ffi.DLL$DLLException: unable to load shared object '/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so'
      dlopen(/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so, 6): Symbol not found:
__ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev
      Referenced from: /Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so
      Expected in: flat namespace
     in /Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so
        at com.oracle.truffle.r.runtime.ffi.DLL$LoadPackageDLLNode.doLoad(DLL.java:704) ...

> 
>     at org.graalvm.polyglot.Context.eval(Context.java:345)
>       at com.oracle.truffle.r.launcher.REPL.lambda$readEvalPrint$1(REPL.java:124)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>       at java.lang.Thread.run(Thread.java:748)
>     Caused by: java.lang.UnsatisfiedLinkError: dlopen(/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so,
> 6): Symbol not found:
> __ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev
>       Referenced from: /Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so
>       Expected in: flat namespace
>      in /Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so
>       at com.oracle.truffle.nfi.impl.NFIContext.loadLibrary(Native Method)
>       at com.oracle.truffle.nfi.impl.NFIContext.loadLibrary(NFIContext.java:170)
>       at com.oracle.truffle.nfi.impl.NFILanguageImpl$LoadLibraryNode.execute(NFILanguageImpl.java:147)
>       at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callProxy(OptimizedCallTarget.java:474)
>       at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callRoot(OptimizedCallTarget.java:449)
>       at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:419)
>       at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.doInvoke(OptimizedCallTarget.java:403)
>       at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:349)
>       at org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:67)
>       at com.oracle.truffle.nfi.NFIRootNode.execute(NFIRootNode.java:106)
>       at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callProxy(OptimizedCallTarget.java:474)
>       at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callRoot(OptimizedCallTarget.java:449)
>       at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:419)
>       at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.doInvoke(OptimizedCallTarget.java:403)
>       at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callIndirect(OptimizedCallTarget.java:330)
>       at org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:320)
>       at com.oracle.truffle.r.ffi.impl.nfi.TruffleNFI_DLL.dlOpen(TruffleNFI_DLL.java:77)
>       at com.oracle.truffle.r.ffi.impl.nfi.TruffleNFI_DLL$TruffleNFI_DLOpenNode.execute(TruffleNFI_DLL.java:64)
  at com.oracle.truffle.r.runtime.ffi.DLL$LoadPackageDLLNode.doLoad(DLL.java:699)
  ... 509 more
Caused by: Attached Guest Language Frames (0)
Error: package or namespace load failed for ‘Rcpp’ in dyn.load(file, DLLpath = DLLpath, ...):
 unable to load shared object '/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so'
  dlopen(/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so,

6):未找到符号: __ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev 引用自:/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so 预期在:平面命名空间 在 /Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so 错误:加载失败

在同一台机器上,我有 Rstudio,我可以毫无问题地安装任何软件包。

这是 $GRAALVM_HOME/bin/R -e 'install.packages("Rcpp", type="source")' 的输出:

install.packages("Rcpp", type="source")
Content type 'application/octet-stream' length 3635277 bytes (3.5 MB)
* installing *source* package ‘Rcpp’ ...
** package ‘Rcpp’ successfully unpacked and MD5 sums checked
** using staged installation
** libs
/usr/local/bin/gcc-7 -I"/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/include" -DNDEBUG -I../inst/include/  -O2 -DFASTR -DNO_GNUR   -fPIC  -O2  -DFASTR -DNO_GNUR  -c Date.cpp -o Date.o
/usr/local/bin/gcc-7 -I"/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/include" -DNDEBUG -I../inst/include/  -O2 -DFASTR -DNO_GNUR   -fPIC  -O2  -DFASTR -DNO_GNUR  -c Module.cpp -o Module.o
/usr/local/bin/gcc-7 -I"/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/include" -DNDEBUG -I../inst/include/  -O2 -DFASTR -DNO_GNUR   -fPIC  -O2  -DFASTR -DNO_GNUR  -c Rcpp_init.cpp -o Rcpp_init.o
/usr/local/bin/gcc-7 -I"/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/include" -DNDEBUG -I../inst/include/  -O2 -DFASTR -DNO_GNUR   -fPIC  -O2  -DFASTR -DNO_GNUR  -c api.cpp -o api.o
/usr/local/bin/gcc-7 -I"/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/include" -DNDEBUG -I../inst/include/  -O2 -DFASTR -DNO_GNUR   -fPIC  -O2  -DFASTR -DNO_GNUR  -c attributes.cpp -o attributes.o
/usr/local/bin/gcc-7 -I"/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/include" -DNDEBUG -I../inst/include/  -O2 -DFASTR -DNO_GNUR   -fPIC  -O2  -DFASTR -DNO_GNUR  -c barrier.cpp -o barrier.o
/usr/local/bin/gcc-7 -Wl,-rpath,/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/lib/,-rpath,/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/../llvm/native/lib -L/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/lib -undefined dynamic_lookup -L/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/../llvm/native/lib -lf2c -dynamiclib -Wl,-headerpad_max_install_names -single_module -multiply_defined suppress -lR -Wl,-rpath,/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/lib/,-rpath,/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/../llvm/native/lib -L/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/lib -L/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/../llvm/native/lib -lf2c -o Rcpp.so Date.o Module.o Rcpp_init.o api.o attributes.o barrier.o
installing to /Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs
** R
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
com.oracle.truffle.r.runtime.ffi.DLL$DLLException: unable to load shared object '/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so'
  dlopen(/Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so, 6): Symbol not found: __ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev
  Referenced from: /Users/admin/tools/maszyny-jvm/graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so
  Expected in: flat namespace

【问题讨论】:

    标签: java r package graalvm fastr


    【解决方案1】:

    看起来在 MacOS Catalina 上,install.packages 函数的 type 参数不默认为 "source",这对于 GraalVM R(又名 FastR)是必不可少的——为 GNU-R 构建的二进制包不兼容快速R。试试这个:

    install.packages("Rcpp", type="source")
    

    如果这不起作用,请尝试从命令行安装软件包,如下所示:

    $GRAALVM_HOME/bin/R -e 'install.packages("Rcpp", type="source")'
    

    【讨论】:

    • 不幸的是我有同样的错误:com.oracle.truffle.r.runtime.ffi.DLL$DLLException: 无法加载共享对象'.../graalvm-ce-java8-20.0.0 /Contents/Home/jre/languages/R/library/00LOCK-Rcpp/00new/Rcpp/libs/Rcpp.so'。 > 会话信息()。 FastR 版本 3.6.1 (2019-07-05) 平台:x86_64-apple-darwin19.4.0 (64-bit) 运行于:macOS Catalina 10.15.4
    • 如果软件包确实是从源安装的,那么安装日志中应该有一些 C++ 编译器调用。在您在问题中发布的日志中,没有此类调用。它们应该如下所示: ** 使用分阶段安装 ** libs "some/path/R/bin/safe-forward-g++" -std=gnu++11 -I"some/path/R/include" -DNDEBUG -I ../inst/include/ -O2 -DFASTR -DNO_GNUR -fpic -O2 -DFASTR -DNO_GNUR -c api.cpp -o api.o ....更多 C++ 编译器调用... 你能否提供@的输出987654327@?
    • 我没有Rcpp目录,报错后删除:*删除'graalvm-ce-java8-20.0.0/Contents/Home/jre/languages/R/library/Rcpp' .我检查了: ./R/bin/configure_fastr /usr/local/bin/brew 没有找到 Homebrew gcc 4.9 安装。请确保您使用 homebrew 命令在您的系统上安装了 gcc:brew install gcc@4.9 当我尝试安装它时:警告:gcc@4.9 4.9.4_2 已经安装并且是最新的
    • 啊,好吧,在这种情况下,这听起来像这个问题:github.com/oracle/fastr/issues/147,它应该在下一个版本 20.1 中修复。
    • 好的,谢谢。是否可以在当前版本中修复我的 GraalVM 设置?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 2020-03-22
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    相关资源
    最近更新 更多