RWeka ロード時のエラー 再び

estis2018/10/12 (金) 10:42 に投稿

iMac (Retina 5K, 27-inch, 2017)
macOS High Sierra 10.13.6
R 3.5.1
Java 10.0.1
で、
RWeka インストール後に、
library(RWeka)
したら、
 エラー: package or namespace load failed for ‘RWeka’:
  .onLoad は loadNamespace()('rJava' に対する)の中で失敗しました、詳細は: 
  call: dyn.load(file, DLLpath = DLLpath, ...) 
  error:  共有ライブラリ '/Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so' を読み込めません: 
  dlopen(/Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/lib/server/libjvm.dylib
  Referenced from: /Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava/libs/rJava.so
  Reason: image not found 
と、エラーになった。

Library not loaded: /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/lib/server/libjvm.dylib
って言われたけど
/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home/lib/server/libjvm.dylib
にある。

色々やったけれど、次の方法で解決した。

$ brew install gcc

~/.R/Makevars
に、
CC=/usr/local/bin/gcc-8
と書いて、

download.packages("rJava", destdir="/Users/myuser/", type="source")
install.packages("/Users/myuser/rJava_0.9-10.tar.gz", repo=NULL, type="source")

で、エラーはなくなった。

 

-----やった色々-----------------------------------------------------------------------------------------------------------------

×
http://blog.musirao.net/node/6076
に書いた
$ sudo ln -f -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib
を試した。
だが、解決しない。
成功した時のエラーは、
Library not loaded: @rpath/libjvm.dylib
と、@rpath/libjvm.dylib だが、
今回は、
Library not loaded: /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/lib/server/libjvm.dylib
だった。

××
https://qiita.com/jjzak/items/470232f08bec4c4df02b
https://stackoverflow.com/questions/30738974/rjava-load-error-in-rstudi…
https://github.com/s-u/rJava/issues/127
https://github.com/s-u/rJava/issues/156
には、
R CMD javareconf
すればいい
とあるのだが、
$ R CMD javareconf
Java interpreter : /usr/bin/java
Java version     : 10.0.1
Java home path   : /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
Java compiler    : /usr/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /usr/bin/jar

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
clang -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home/include/darwin  -I/usr/local/include   -fPIC  -Wall -g -O2  -c conftest.c -o conftest.o
clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o conftest.so conftest.o -L/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home/lib/server -ljvm -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation are out of sync. Falling back to library file for linking.

JAVA_HOME        : /Library/Java/JavaVirtualMachines/jdk-10.0.1.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 /Library/Frameworks/R.framework/Resources
Done.

と、
Java home path  は、 /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
と認識しているが、
エラーは変わらない。

×××
R CMD javareconf
の結果に表示される
ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation are out of sync. Falling back to library file for linking.
が気になったので、
https://stackoverflow.com/questions/51314888/ld-warning-text-based-stub…
にあるように、
$ sudo rm -rf /Library/Developer/CommandLineTools
$ xcode-select --install
したが、ld: warning が消えなかった。

××××
https://suryu.me/post/rjava_for_sierra/

dyn.load()
で、先読みさせればよいとあったので、
dyn.load("/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home/lib/server/libjvm.dylib")
してから、
library(RWeka)
したけれど、エラーは変わらなかった。

×××××
パッケージのソースからのインストールを試みた。

http://d.hatena.ne.jp/t_ume_tky/20120725/1343189052

パッケージのソースダウンロード方法が記載されていた。

download.packages("rJava", destdir="/Users/myuser/", type="source")
でダウンロードして、

https://code.i-harness.com/ja/q/167e21
を参考に
install.packages("/Users/myuser/rJava_0.9-10.tar.gz", repo=NULL, type="source")
でインストール。

が、
make[2]: *** [libjri.jnilib] Error 1
make[1]: *** [src/JRI.jar] Error 2
make: *** [jri] Error 2
ERROR: compilation failed for package ‘rJava’
* removing ‘/Library/Frameworks/R.framework/Versions/3.5/Resources/library/rJava’
とエラーになる。
途中に表示された
clang: error: unsupported option '-fopenmp'
が影響あるのかと思い、
https://heavywatal.github.io/rstats/config.html
を参考に
~/.R/Makevars
に、
CC=/usr/bin/gcc
と書いて実行したけれど、同じエラーが出る。

××××××

https://github.com/s-u/rJava/issues/156
には、
 The default is Java 9
だとあったので、あきらめて
sudo ln -s /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home/lib/server/libjvm.dylib /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/lib/server/libjvm.dylib
して、エラーは、出なくなった。


https://qiita.com/ligerbolt/items/6e27c882838fdcc1a490
をよく読んだら、
brew からインストールした gcc を使っていた!!!!

$ brew install gcc
してから、
~/.R/Makevars
に、
CC=/usr/local/bin/gcc-8
と書いて、
install.packages("/Users/myuser/rJava_0.9-10.tar.gz", repo=NULL, type="source")
したら、インストール成功。

$ sudo rm -rf  /Library/Java/JavaVirtualMachines/jdk-9.jdk/

してから、
library(RWeka)
しても、エラーはなくなった。