web-dev-qa-db-fra.com

Liens symboliques et rigides pour Java - pourquoi ne fonctionne-t-il que

J'ai installé Oracle Java sur mon Ubuntu 16.04. J'ai essayé de faire un lien dur:

ln /usr/local/jdk-9.0.1/bin/Java /usr/bin/Java

Quand j'ai lancé Java j'ai eu cette erreur:

Java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

J'ai enlevé le lien dur et fait un lien souple à la place:

ln -s /usr/local/jdk-9.0.1/bin/Java /usr/bin/Java

Cela résout le problème. Alors, pourquoi le lien virtuel fonctionne-t-il alors que le lien dur a échoué?

3
vico

Lorsque vous créez un lien symboliqueln -s dans un fichier, il agit comme un lien depuis le monde Windows. Vous pouvez lancer ce lien symbolique à partir de n’importe quel dossier, mais le répertoire de travail sera celui dans lequel se trouve le fichier original.

En ce qui concerne les liens physiques, lorsque vous créez un lien physiqueln, vous effectuez une sorte de copie du fichier d'origine en conservant toutes ses propriétés (il a le même inode que le fichier d'origine). Ainsi, le répertoire de travail sera celui où se trouve le lien dur. Donc, dans votre cas, le lien physique fonctionne bien, mais il utilise /usr/bin comme répertoire de travail et recherche d'autres fichiers supplémentaires dans ce dossier.

3
M. Dm.