Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/01/2006, à 21:31

gobinax

[Résolu]Variables d'environnement sous Ubuntu

Je cherche à programmer en c++ en Utilisant OGRE (www.ogre3d.org).

Après avoir construit la bibliothèque  et écrit un petit programme pour tester je compile (ça c'est bon), je lance et j'obtiens (ça c'est pas bon):

./SampleApp: error while loading shared libraries: libOgreMain.so.4: cannot open shared object file: No such file or directory

Bon je comprends mon problème
-à la compilation: j'ai spécifié le repertoire des include , et lib donc pas de problème
-à l'execution: il ne sait pas trouver le fichier OgreMainLib.so car il se trouve dans /usr/local/lib

Après avoir rechercher sur internet, je vois qu'il faut définir ce répertoire dans la variable d'environnement LD_LIBRARY_PATH.

export LD_LIBRARY_PATH=/usr/local/lib

Et là mon programme se lance(enfin il plante mais au moins il charge les lib dynamiques). Je me demande donc:

-Où sont definies les variables d'environnement?

-Sur un topic du forum OGRE, on conseillait d'éditer /etc/ld.so.conf et de lancer /sbin/ldconfig. Je n'ai pas trouver ce fichier, dépend il des distributions de linux?

-Comment éditer définitivement une variable d'environnement (export ne la définit que dans le shell courant)?

-Pourquoi LD_LIBRARY_PATH est-elle vide chez moi par defaut ("echo $LD_LIBRARY_PATH" me retourne vide)? Des tas de programmes utilisent des lib dynamique et doivent aller les chercher dans /usr/lib par exemple. Ces chemins sont-ils définis autres part dans le système? Dans une autre variable?


Je débute en programmation (surtout sous linux) donc c'est avant tout pour comprendre ce que je fais que je poste ça. Merci d'avance pour les réponses ou pour n'importe quelle information intéressante dans ce domaine.

Dernière modification par gobinax (Le 01/02/2006, à 16:39)

Hors ligne

#2 Le 31/01/2006, à 22:31

benohite

Re : [Résolu]Variables d'environnement sous Ubuntu

Salut,

gobinax a écrit :

-Où sont definies les variables d'environnement?

-Comment éditer définitivement une variable d'environnement (export ne la définit que dans le shell courant)?

- Dans divers fichiers script lancés au démarrage.

- Edite le fichier .bashrc qui se situe dans ton répertoire home ensuite tu rajoutes la ligne export que tu utilisais. La variable sera alors initialisée au prochain lancement de shell. Pour qu'elle soit prise en compte tout de suite utilises la commande:

 source ~/.bashrc

ben


You are legally entitled and encouraged to copy, share and redistribute this CD for yourself and your friends. Share the spirit of Ubuntu !

Hors ligne

#3 Le 01/02/2006, à 16:20

gobinax

Re : [Résolu]Variables d'environnement sous Ubuntu

OK,

merci pour l'indication. En cherchant un peu plus loin je crois y voir un peu plus clair.

En effet il y a pas mal de fichiers qui contiennent ces variables: ~/.bashrc mais aussi ~/bash_profile (pour l'utilisateur courant) et /etc/profile qui fait la même chose mais pour tous les utilisateurs (ils sont inclus les uns dans les autres d'ailleurs).

Pour ce qui est de LD_LIBRARY_PATH, qui dit où sont les .so, ce n'est pas défini en fait. Il est possible de la créer mais il y une autre solution. Le système utilise ldconfig au lancement pour savoir où sont les .so (lib dynamique = ld).

man ldconfig
ldconfig - configure dynamic linker run-time bindings

C'est lancé au démarrage de la session et ça vérifie les répertoire /lib, /usr/lib mais aussi les répertoire indiqués dans /etc/ld.so.conf. C'est un fichier que je n'avais pas au départ mais je l'ai créer, y ai ajouter /usr/local/lib et j'ai lancer ldconfig et pof... plus de problème pour trouver les .so installer dans /usr/local/lib (et celles dans les sous répertoires non plus je crois).
Tous ça répond à mes questions:

-Sur un topic du forum OGRE, on conseillait d'éditer /etc/ld.so.conf et de lancer /sbin/ldconfig. Je n'ai pas trouver ce fichier, dépend il des distributions de linux?
-Pourquoi LD_LIBRARY_PATH est-elle vide chez moi par defaut ("echo $LD_LIBRARY_PATH" me retourne vide)? Des tas de programmes utilisent des lib dynamique et doivent aller les chercher dans /usr/lib par exemple. Ces chemins sont-ils définis autres part dans le système? Dans une autre variable?

Voilà, je me suis répondu un peu tout seul mais ça pourrait servir à quelqu'un d'autre . D'ailleurs n'hésitez pas à enrichir tout ça de vos propres connaissances ça m'intéresse même si mon problème est résolu.

Dernière modification par gobinax (Le 01/02/2006, à 16:22)

Hors ligne

#4 Le 14/02/2006, à 20:07

PierreAd

Re : [Résolu]Variables d'environnement sous Ubuntu

Merci d'avoir laissé la solution qui t'a permis de faire fonctionner tout cela, j'avais exactement le même probleme et je ne pouvais pas éxécuter mon appli utilisant les wxwidgets, alors que la compile passait bien....

Merci encore big_smile:D:D

Hors ligne

#5 Le 01/11/2011, à 23:47

Hibou57

Re : [Résolu]Variables d'environnement sous Ubuntu

LD_LIBRARY_PATH me pose problèmes.

On peut la définir et l’exporter depuis un .zshrc ou un .bashrc, mais elle ne sera alors fixée que lorsque l’on lance une application depuis la console.

Si je la défini et l’exporte depuis .profile, alors elle est toujours vide (quelque chose semble la ré-initialiser inconditionnellement, après que .profile soit interprété).

ldconfig ne peut pas être utilisé pour une compte utilisateur, bien que l’exécution de la commande

ldconfig -n /chemin/lib

s’exécute sous un compte utilisateur sans renvoyer d’erreur, elle est sans aucun effet en pratique.

Bref, the Question : comment définir LD_LIBRARY_PATH de manière persistante et pas seulement depuis un shell, ou alors comment faire sans LD_LIBRARY_PATH, mais dans le cadre d’un compte utilisateur seulement et non‑pas system wide ?

-- EDIT --
Ce bug volontaire semble connu, mais il semble que personne ne veuille le corriger. C’est pourtant une sérieuse faute de design que d’obliger à faire prendre en compte un chemin de recherche de librairies pour tout le système quand ça ne concerne qu’un seul compte utilisateur.

N’hésitez pas à voter « Ce bug m’affecte moi aussi » sur ces trois rapports de bug. Même s’ils s’en moquent, au moins ils ne pourront pas dire qu’ils ne savaient pas que ça pose un problème et que c’est une erreur de conception.

-- EDIT (2) --
Dans le message n°21 du premier rapport de bug, une solution est indiquée pour désactiver la source de ce bug volontaire. Dans le fichier /etc/X11/Xsession.options il faut mettre en commentaire la ligne “use-ssh-agent”. Je viens d’essayer, et ça marche. Ce n’est pas très propre, mais on fait ce qu’on peut quand il faut se débarrasser d’un bug volontaire. Leur argument de la sécurité ne tiens pas, puisque la variable peut être fixée depuis les fichiers d’initialisation des shells. C’est n’importe quoi cet argument, à moins qu’ils n’aient décidé que l’environnement shell peut se permettre d’être moins sûr que l’environnement de bureau.

-- EDIT (3) --
Autre solution, mais plutôt bancale. Il est apparemment possible de spécifier la valeurs de certaines variables d’environnement depuis une fichier *.desktop, comme indiquée dans EnvironmentVariables (help.ubuntu.com) dans la section “Launching desktop application with an environment variable”. Le problème avec cette solution, c’est qu’elle ne permet pas de fixer conditionnellement la valeur de la variable, et c’est justement nécessaire avec les variables qui sont des listes de chemins, car soit on l’initialise, sont on y ajoute quelque chose, et cela nécessite une instruction conditionnelle, qui n’est pas disponible avec cette solution.

Dernière modification par Hibou57 (Le 02/11/2011, à 00:46)


Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)

Hors ligne