Je vais tâcher d'être clair dans mon explication, c'est pas forcément simple 🙂
En java, quand tu charges une dépendance, il faut qu'elle soit dans le
classpath pour être "trouvée" et que le programme puisse s'exécuter. Là, tu es dans un cas un peu particulier où ta dépendance c'est pas un jar, mais une bibliothèque native (probablement compilé depuis du C ou C++). J'imagine que tu as un JAR qui fait appel à la bibliothèque native et qui wrap les fonctions pour les rendre utilisables en java.
En C, tes dépendances peuvent être soit du "static link" et donc là il faut que la bibliothèque soit dans un chemin spécifique avec un nom précis, soit elle est compilé avec du "dynamic linking". En gros tu dis que sur la plateforme qui exécutera le programme, il y aura une bibliothèque dynamique (shared object, d'où les .so) disponible dans le(s) répertoire(s) des bibliothèques partagées. Et donc ton programme n'a pas à fournir cette bibliothèque. C'est un des avantages de linux où énormément de programmes sont compilés avec des bibliothèques partagées. Si une faille est détecté dans une bibliothèque partagée, la mise à jour de cette bibliothèque sera effective pour tous les logiciels qui utilisent la version partagée du système. Si le programme avait été compilé avec la lib en static, alors chaque programme aurait dû mettre à jour la lib, et beaucoup ne se seraient même pas donné la peine, ou avec beaucoup de retard. Ça évite aussi d'avoir 20 fois la même version d'une même lib.
Pour en revenir au nœud du problème, lorsque tu exécutes un programme, avant l'exécution du programme il y a
ld qui est exécuté et qui se charge de retrouver toutes les références vers les bibliothèques dynamiques. Le truc, c'est que les répertoires standards où il va chercher la lib, et ben
/media/az/Data1To/LSFUtils-ws/vlcPlayer/src/lib n'en fait pas partie 🙂
Donc c'est une des façons d'ajouter ce répertoire à la liste à parcourir pour trouver les bibliothèques "natives" (pas les jar java quoi). Il y en a d'autres, dont une probablement meilleure que celle que je t'ai fait essayer. Regarde
ici, la 4ème solution est la plus propre d'après moi.
Maintenant, pour répondre à tes questions
Omega38 a écritPar ailleurs pourquoi les autres librairies .so liées à VLC (libvlcxxxx.so) qui sont dans le même répertoire .../src/lib ne semblent pas manquer?
La ligne que je t'ai donné permet de trouver tous les .so du répertoire mentionné si le programme en a besoin. Et tu l'as dit toi même, c'est :
le même répertoire
Omega38 a écritpourquoi ce dysfonctionnement avec Eclipse?
Si ça fonctionnait initialement avec eclipse, c'est probable que :
- la déclaration des lib natives était correctement faite dans ton projet et que démarrer le projet depuis éclipse ajoutait tout ce paramétrage au lancement
- les différents *.so nécessaires étaient déjà présent sur le système et donc c'était pas ceux du projet qui étaient utilisés mais ceux du système.
Pour moi, soit tu as flingué la conf des lib natives dans ton projet, soit peut être tu as changé la JVM qui exécute eclipse et les lib natives disponibles ne sont pas les mêmes (java.library.path est différent).
Ps: je ne suis pas expert du C ni des bibliothèques natives donc il y a peut être des imprécisions voir des erreurs, mais l'idée générale doit être là 🙂