web-dev-qa-db-ja.com

R CMD javareconfがjni.hを見つけられない

Anacondaでdebian(jessie)に基づいたdockerコンテナにrJavaをインストールしようとしています。

ルートとして、私はやった

$ apt-get update  && apt-get install -y --no-install-recommends \
  default-jdk default-jre libicu-dev 

それから

$ R CMD javareconf 
Java interpreter : /usr/lib/jvm/jdk1.8.0_121/jre/bin/Java
Java version     : 1.8.0_121
Java home path   : /usr/lib/jvm/jdk1.8.0_121
Java compiler    : /usr/lib/jvm/jdk1.8.0_121/bin/javac
Java headers gen.: /usr/lib/jvm/jdk1.8.0_121/bin/javah
Java archive tool: /usr/lib/jvm/jdk1.8.0_121/bin/jar

trying to compile and link a JNI program 
detected JNI cpp flags    : -I/usr/lib/jvm/Java/include -I/usr/lib/jvm/Java/include/linux
detected JNI linker flags : -L$(Java_HOME)/jre/lib/AMD64/server -ljvm
gcc -std=gnu99 -I/opt/conda/lib/R/include -DNDEBUG -I/usr/lib/jvm/Java/include -I/usr/lib/jvm/Java/include/linux -I/opt/conda/include    -fpic  -I/opt/conda/include  -c conftest.c -o conftest.o
conftest.c:1:17: fatal error: jni.h: No such file or directory
 #include <jni.h>
                 ^
compilation terminated.
/opt/conda/lib/R/etc/Makeconf:133: recipe for target 'conftest.o' failed
make: *** [conftest.o] Error 1
Unable to compile a JNI program


Java_HOME        : /usr/lib/jvm/jdk1.8.0_121
Java library path: 
JNI cpp flags    : 
JNI linker flags : 
Updating Java configuration in /opt/conda/lib/R
Done.

ただし、jni.hはJDKに含まれています。

# find /usr/lib/jvm/jdk1.8.0_121/ -name jni.h
/usr/lib/jvm/jdk1.8.0_121/include/jni.h

javareconfが見つけているようには見えません。また、Java_HOMEなど、javareconfで設定できるすべての変数を見ると、適切なインクルードを必要とするJNI cppフラグを設定する機能がありません。

私はこの問題についてインターネットで さまざまな投稿 を見ましたが、解決策はありません。

13
dfrankow

Rは別の場所を見ています:

detected JNI cpp flags    : -I/usr/lib/jvm/Java/include -I/usr/lib/jvm/Java/include/linux

同様の問題が発生しましたが、jdkをインストールした後はすべて問題ありません。

Sudo apt-get install openjdk-8-jdk
14
sgu

同じ問題がありました。 Javaフォルダーへのパスを指定することで修正されました。簡単に言うと、Javaをインストールした後、次のような行が表示されることがあります。

update-alternatives: using /usr/lib/jvm/Java-9-openjdk-AMD64/bin/jar to provide /usr/bin/jar (jar) in auto mode

次のように、javareconfを呼び出すときに、そのパスをJava_HOME引数として指定しました。

Sudo R CMD javareconf Java_HOME=/usr/lib/jvm/Java-9-openjdk-AMD64/bin/jar

これが役に立つことを願って

7
Damiano Fantini

Java-configファイルを編集して問題を解決しました

Sudo nano /usr/lib/R/etc/javaconf

set the correct Java_HOME in this row:
: ${Java_HOME=/usr/local/Java/jdk-9.0.1}
6
Spaska Forteva

すでにJava 11をubuntu 18.04にインストールしていましたが、このガイドに従ってjdk-11.0.1をインストールする必要がありました: https://websiteforstudents.com/how-to-install-Oracle- Java-jdk-11-on-ubuntu-18-04-16-04-18-10 /

次に、@ Spanska FortevaのようにjavaconfでJava_HOMEを変更しました

Sudo nano /usr/lib/R/etc/javaconfIn javaconf 

Javaの古いバージョンへのパスがまだ指定されていることがわかりました。

## Versions from settings when configure was run
: ${Java_HOME=/usr/lib/jvm/default-Java}
: ${Java_CPPFLAGS=~autodetect~}
: ${Java_LD_LIBRARY_PATH=~autodetect~}
: ${Java_LIBS=~autodetect~}

Java_HOMEへのパスを新しくインストールしたjdkに変更しました。

: ${Java_HOME=/usr/lib/jvm/jdk-11.0.1}

次に、jni.hへのパスを指定してCMDを実行しました。

Sudo R CMD javareconf /usr/lib/jvm/jdk-11.0.1/include/jni.h

最後のビットは必要ないかもしれませんが、とにかくそのフォルダを見ることができるはずですが、それは私がやったことです。

1
chilifan

ここで答えが確認されたかどうかはわかりませんが、私はみんなにこれを指摘します 記事 アンドリュー・コリアー.

彼が推奨するもの:

(1)すべてのリポジトリの更新

Sudo apt update -y

(2)JREとJDK 8がインストールされていることを確認する

Sudo apt install -y openjdk-8-jdk openjdk-8-jre

(3)次に、多くのユーザーがすでに言っているように、RをJavaにJDK 8への明示的なパスを指定して)

Sudo R CMD javareconf Java_HOME=/usr/lib/jvm/Java-8-openjdk-AMD64/

特定のJavaパッケージは、/ includeディレクトリ内に必要なすべてのコンパイル済みコンテンツが含まれている限り、重要ではありません。

user@laptop:~$ ls /usr/lib/jvm/Java-8-openjdk-AMD64/include/
classfile_constants.h  jdwpTransport.h  jvmticmlr.h  linux
jawt.h                 jni.h            jvmti.h

これについての詳細は、jni.hを見つける方法?このディレクトリを正しく検索/コンパイルするために。

同じ問題があり、最終的に修正できました。多くの検索の後、これは私のために働いた(私は基本的にここのガイドに従った: https://www3.ntu.edu.sg/home/ehchua/programming/howto/JDK_Howto.html ):

  • jDK(jdk1.8.0_201)を/ usr/Java /にダウンロードして展開する
  • jRE(jre1.8.0_201)を/ usr/Java /にダウンロードして展開します(このステップが必要かどうかはわかりませんが、この問題を解決するための以前の試みで行いました)
  • 適切なバージョンを使用して、新しいJavaをUbuntuに通知する

このために私は走った:

$ Sudo update-alternatives --install "/usr/bin/Java" "Java" "/usr/Java/jdk1.8.0_201/bin/Java" 1

$ Sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/Java/jdk1.8.0_201/bin/javac" 1

$ Sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/Java/jdk1.8.0_201/bin/javaws" 1

に続く

$ Sudo update-alternatives --set Java /usr/Java/jdk1.8.0_201/bin/Java

$ Sudo update-alternatives --set javac /usr/Java/jdk1.8.0_201/bin/javac

$ Sudo update-alternatives --set javaws /usr/Java/jdk1.8.0_201/bin/javaws

その後、最終的に私のJava

Sudo update-alternatives --config Java

ここで、新しくインストールしたJavaを選択しました。それから私は走った

 Sudo R CMD javareconf Java_HOME=/usr/Java/jdk1.8.0_201/bin/

ここでJava jdkパスを明示的に指定しました。これが正常に終了した後、glmultiをインストールするために必要なrstudioをrstudioにインストールすることができました。

1
Obnebion

私の場合、私は走らなければなりませんでした

R CMD javareconf

suのように、Sudoだけでは機能しませんでした。