【问题标题】:rJava installation ld:library not found for -lpcre2-8rJava 安装 ld:library not found for -lpcre2-8
【发布时间】:2021-12-12 21:27:59
【问题描述】:

尝试使用 rJava 并让它使用 java 版本 11。

目前它使用我以前安装的版本 17。

当我运行R CMD javareconf 时,大多数设置看起来都是正确的。

Java interpreter : /Users/adam/.jenv/shims/java
Java version     : 11.0.13
Java home path   : /Library/Java/JavaVirtualMachines/zulu11.52.13-ca-jdk11.0.13-macosx_aarch64/zulu-11.jdk/Contents/Home
Java compiler    : /Users/adam/.jenv/shims/javac
Java headers gen.: /Users/adam/.jenv/shims/javah
Java archive tool: /Users/adam/.jenv/shims/jar
...

但当我打电话给rJava::.jcall("java.lang.System","S","getProperty","java.version") 时,我仍然得到版本 17。

因此,我尝试从源代码重新安装 rJava。当我这样做时,安装会将 Java 11 识别为要使用的“默认”Java 安装,但我的 cpp 编译器遇到了问题,因为我看到了错误

ld: library not found for -lpcre2-8
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [libjri.jnilib] Error 1
make[1]: *** [src/JRI.jar] Error 2
make: *** [jri] Error 2
ERROR: compilation failed for package ‘rJava’

当我运行install.packages("rJava",type="source")

其他问题(1,2,3)有类似的问题,但我尝试复制链接器库的安装,libpcre2-dev libbz2-dev zlib1g-dev 建议给 ubuntu 用户对我不起作用 - 我有无法找出如何以 Mac 用户身份安装该库。此外,我不确定在这种情况下是否正确设置了“链接”。

问题 我如何/在哪里可以找到并安装下面指定的 mac 版本的 -lpcre2-8 包,并确保为 rJava 编译提供适当的链接?

详情 我正在使用 Rstudio v1.4.1717 开发 Mac OS v12.0.1(M1 芯片)、R v.4.1.2 来运行 R。

【问题讨论】:

    标签: c++ r rjava


    【解决方案1】:

    首先,重新编译不会有任何效果。 macOS 上使用的 Java 版本受以下约束:

    • JAVA_HOME 环境变量
    • 系统 Java 选择(参见/usr/libexec/java_home

    通常,JAVA_HOME 未设置,因此使用您的 macOS 系统设置。您可以使用 /usr/libexec/java_home -V 查看已安装的 Java 版本,包括已选择的版本:

    $ /usr/libexec/java_home -V
    Matching Java Virtual Machines (2):
        17, x86_64: "Java SE 17"    /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
        1.8.0_252, x86_64:  "AdoptOpenJDK 8"    /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
    
    /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
    

    如果要更改默认值,可以将JAVA_HOME 设置为首选值。例如:

    ## use Java 1.8
    $ JAVA_HOME=`/usr/libexec/java_home -v 1.8` Rscript -e \
      'print(rJava::J("java.lang.System")$getProperty("java.version"))'
    [1] "1.8.0_252"
    
    ## use Java 17
    $ JAVA_HOME=`/usr/libexec/java_home -v 17` Rscript -e \
      'print(rJava::J("java.lang.System")$getProperty("java.version"))'
    [1] "17"
    
    

    其次,如果您想重新编译 rJava,您将需要用于构建 R 的所有库。对于 CRAN R 构建,https://mac.r-project.org/bin/ 提供了这些库,但我不建议您去那里,除非您想修改 rJava。您可以通过不编译 JRI(在 Java 中嵌入 R)支持让您的生活更轻松,即添加 --disable-jri,因为它需要 R 使用的库。只是 rJava 包本身不需要它。

    最后,在支持页面rJava Discussion 上提问通常要快得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 2016-03-16
      • 2013-11-08
      • 1970-01-01
      相关资源
      最近更新 更多