【问题标题】:sudo R CMD javareconf and R CMD javareconf produce different output with java 10sudo R CMD javareconf 和 R CMD javareconf 使用 java 10 产生不同的输出
【发布时间】:2018-03-27 17:25:32
【问题描述】:

我在 macOS 10.13.3 上,我刚刚更新到 java 10,当我尝试将 R 更新到它时,我意识到如果我运行 R CMD javareconf 或不使用 sudo,我会得到两个不同的输出。如果我使用sudo 运行它会坚持使用Java 9,但如果我没有使用sudo 运行它会配置Java 10。

没有sudo

$ R CMD javareconf                                                                        
Java interpreter : /Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/bin/java
Java version     : 10
Java home path   : /Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home
Java compiler    : /Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/bin/jar
Non-system Java on macOS

trying to compile and link a JNI program
detected JNI cpp flags    : -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/darwin
detected JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm
/usr/local/opt/llvm/bin/clang  -I/usr/local/Cellar/r/3.4.4/lib/R/include -DNDEBUG -I/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/include/darwin  -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include   -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c conftest.c -o conftest.o
/usr/local/opt/llvm/bin/clang++ -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/usr/local/opt/gettext/lib -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib -L/usr/local/Cellar/r/3.4.4/lib/R/lib -L/usr/local/opt/gettext/lib -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib -o conftest.so conftest.o -L/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/lib/server -ljvm -L/usr/local/Cellar/r/3.4.4/lib/R/lib -lR -lintl -Wl,-framework -Wl,CoreFoundation


JAVA_HOME        : /Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home
Java library path: $(JAVA_HOME)/lib/server
JNI cpp flags    : -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/darwin
JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm
Updating Java configuration in /usr/local/Cellar/r/3.4.4/lib/R
override rw-r--r--  root/admin for /usr/local/Cellar/r/3.4.4/lib/R/etc/Makeconf? (y/n [n]) y
override rw-r--r--  root/admin for /usr/local/Cellar/r/3.4.4/lib/R/etc/ldpaths? (y/n [n]) y
Done.

sudo

$ sudo R CMD javareconf                                                                   
Java interpreter : /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/bin/java
Java version     : 9.0.4
Java home path   : /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home
Java compiler    : /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/bin/javac
Java headers gen.: /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/bin/javah
Java archive tool: /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/bin/jar
Non-system Java on macOS

trying to compile and link a JNI program
detected JNI cpp flags    : -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/darwin
detected JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm
/usr/local/opt/llvm/bin/clang  -I/usr/local/Cellar/r/3.4.4/lib/R/include -DNDEBUG -I/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/include/darwin  -I/usr/local/opt/gettext/include -I/usr/local/opt/llvm/include   -fPIC  -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe -c conftest.c -o conftest.o
/usr/local/opt/llvm/bin/clang++ -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/usr/local/opt/gettext/lib -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib -L/usr/local/Cellar/r/3.4.4/lib/R/lib -L/usr/local/opt/gettext/lib -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib -o conftest.so conftest.o -L/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/lib/server -ljvm -L/usr/local/Cellar/r/3.4.4/lib/R/lib -lR -lintl -Wl,-framework -Wl,CoreFoundation


JAVA_HOME        : /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home
Java library path: $(JAVA_HOME)/lib/server
JNI cpp flags    : -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/darwin
JNI linker flags : -L$(JAVA_HOME)/lib/server -ljvm
Updating Java configuration in /usr/local/Cellar/r/3.4.4/lib/R
Done.

这样做的最终结果是:没有 sudo 并因此使用 java 10,rJava 无法构建。使用 sudo 和 java 9,rJava 可以正常构建。

有人知道发生了什么吗?

PS1/ 我在我的 zsh 和 bash 配置文件中将 $JAVA_HOME 设置为 JAVA_HOME="$(/usr/libexec/java_home)"

PS2/ 只是为了将所有信息集中在一个地方...使用 Java 10 构建 rJava 时出现以下错误:

warning: [options] bootstrap class path not set in conjunction with -source 6
warning: [options] source value 6 is obsolete and will be removed in a future release
warning: [options] target value 1.6 is obsolete and will be removed in a future release
warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
4 warnings
/usr/bin/javah -d . -classpath . org.rosuda.JRI.Rengine
Unable to locate an executable at "/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/bin/javah" (-1)
make[2]: *** [org_rosuda_JRI_Rengine.h] Error 2
make[1]: *** [src/JRI.jar] Error 2
make: *** [jri] Error 2
ERROR: compilation failed for package ‘rJava’
* removing ‘/Users/lpuerto/Library/R/3.x/library/rJava’
* restoring previous ‘/Users/lpuerto/Library/R/3.x/library/rJava’

The downloaded source packages are in
    ‘/private/var/folders/wf/41gjf2mx7m7fmvfd8dr22_5h0000gn/T/RtmpT2kJMY/downloaded_packages’
Warning message:
In install.packages("rJava", repos = "cloud.r-project.org") :
  installation of package ‘rJava’ had non-zero exit status

我检查过,/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/bin/javah 上没有 javah,就像在 Java 9 中一样。

【问题讨论】:

  • sudo 在以 root 或其他用户身份运行时,是否倾向于清理环境变量?将它放在 您的 zsh/bash 配置文件中没有任何作用,因为它们不一定来自 sudo 的其他用户环境。
  • 我运行 sudo java --version 并获得了版本 10。
  • 我只是编辑提到我在 macOS 上。
  • 如果我使用 sudo 运行,它会坚持 Java 9,但如果我使用 sudo 运行,它会配置 java 10 ...您的意思是在其中一个上“没有”吗?
  • 是的,抱歉我刚刚编辑了

标签: java r macos rjava java-10


【解决方案1】:

我通过使用 sudo ln -s /usr/bin/javah /Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/bin/javah 创建从 /usr/bin/javah 到该路径的符号链接来解决问题。

希望它也对你有用。

【讨论】:

  • 我只是检查了一下,你正在创建一种循环....../usr/bin/javah 已经指向/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/bin/javah。如果您创建一个指向/usr/bin/javah 的符号链接,可能会变得混乱。
  • 更新到 rJava 的最新开发版本,问题得到解决。
【解决方案2】:

正如在R-SIG-mac list 上讨论的那样,如果您更新到 rJava 的最新开发版本,问题就会得到解决。

install.packages('rJava', repos = 'http://rforge.net')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    相关资源
    最近更新 更多