Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 13/12/2012, à 20:56

21did21

lien entre executable, librairie, pointeurs (en mode console)

Bonjour tous,
je vous écris car j'ai un peu du mal à comprendre les pointeurs vers fichiers (dans le but d’exécuter un logiciel à partir d'un autre emplacement).
$$$$$
je ne suis pas très clair donc voici un exemple :
$$$$$
I-1)  j'ai un dossier "/home/cedric/programThom", dans ce dossier j'ai :
- un executable "run_x86_64"
- une bibliotheque utile à l'executable : "libr.h"
- un dossier de données '.txt' qui se trouve dans "/home/cedric/programThom/input", Pour lancer le programme j'utilise "runP.txt"
I-2) habituellement, pour lancer ce programme je fais ceci (tout marche très bien):
- je me mets dans "/home/cedric/programThom/input"
- je donne à mon executable son fichier d'entrée à l'aide de : "echo runP | ../run_x86_64"
$$$$$
intro à mon soucis :
$$$$$
II-1) ce que j'ai expliqué dans le cas ci dessus sert à lancer le programme à partir du fichier "runP.txt". Or pour des raisons que je n'expliquerai pas,
il est beaucoup plus utile pour moi d'avoir plusieurs dossiers du type "/home/cedric/programThom/input" par exemple :
- "/home/cedric/input1"
- "/home/cedric/input2"
- "/home/cedric/input3"
II-2) j'ai donc fais ceci et essayé de lancer mon programme à partir d'un de ces dossiers avec la commande :
"echo runP | ../programThom/run_x86_64"
II-3) en effectuant ceci j'ai remarqué que l'executable avait bien été lancé correctement mais j'ai un message d'erreur qui me dis qu'il ne trouve pas un
élément qui est défini dans "libr.h"
$$$$$
mon soucis smile
$$$$$
j'avais déjà eu par le passé ce soucis et un amis avait débloqué mon problème en faisant un pointeur (je crois que c'est ça) vers "libr.h"
dans mon dossier input (d'ailleurs j'ai toujours ça quelque part si vous avez besoin d'info).
III-1) le soucis est que j'ai réinstallé linux et je n'ai plus l'ancienne version du programme. J'ai une nouvelle version du programme et l'ancienne méthode
ne fonctionne donc plus (car mon ancienne librairie ne correspond pas à mon nouveau programme).
III-2) j'aimerai donc juste recréer un lien à partir vers la librairie "/home/cedric/programThom/libr.h"
afin que la commande "echo runP | ../programThom/run_x86_64" puisse fonctionner à partir du dossier : "/home/cedric/input1"
III-3)j'ai donc fais ceci (dans "/home/cedric/input1") : "ln -s /home/cedric/programThom/libr.h" et j'ai bien un pointeur
qui a été généré avec le nom "libr.h".
III-4)je pensais donc que tout etait résolu et j'ai fais : "echo runP | ../programThom/run_x86_64"
à partir de "/home/cedric/input1" MAIS TOUJOURS LE MEME SOUCIS sad
$$$$$
questions
$$$$$
du coup je voudrais comprends comment tout ceci fonctionne (executable,pointeurs,dossiers différents...) afin que je puisse
faire fonctionner mon programme comme auparavant : c'est à dire que l'executable ou/et sa librairie soit reconnu à partir d'un autre dossier
juste en ayant besoin de spécifier de quelque librairie je parle.

je vous remercie pour l'aide précieuse que vous pourrez m'apporter !

Hors ligne

#2 Le 13/12/2012, à 21:31

pingouinux

Re : lien entre executable, librairie, pointeurs (en mode console)

Bonsoir,
La séquence suivante est erronée (merci à tiramiseb de me l'avoir signalé)

21did21 a écrit :

j'utilise "runP.txt"
………………
echo runP | ../run_x86_64

Ne serait-ce pas plutôt ceci :

echo runP.txt | ../run_x86_64

ou même mieux

../run_x86_64 <runP.txt 

Fin de la séquence erronée

une bibliotheque utile à l'executable : "libr.h"

Ceci ne ressemble pas à une bibliothèque mais à un fichier d'en-tête, qui ne sert qu'à la compilation et pas à l'exécution.

Que donnent ces commandes :

cd /home/cedric/programThom
file run_x86_64 libr.h input/runP.txt
ldd run_x86_64

Ajouté : Peux-tu donner le message d'erreur exact que tu obtiens quand ça plante ? (copier/coller)

Dernière modification par pingouinux (Le 13/12/2012, à 21:58)

Hors ligne

#3 Le 13/12/2012, à 21:48

tiramiseb

Re : lien entre executable, librairie, pointeurs (en mode console)

pingouinux> achtung, tu as mélangé echo et cat smile

il a écrit

echo runP | ../run_x86_64

pas

cat runP | ../run_x86_64

donc ta correction est fausse smile


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXe siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#4 Le 13/12/2012, à 21:51

pingouinux

Re : lien entre executable, librairie, pointeurs (en mode console)

@tiramiseb : Oh m...., je me suis planté… Merci de l'avoir signalé. Je corrige immédiatement.

Hors ligne

#5 Le 13/12/2012, à 21:51

21did21

Re : lien entre executable, librairie, pointeurs (en mode console)

salut Pinguin unix et merci pour ton aide

je viens de tester les commandes que tu m'as dis (dans le cas où mon fichier input se trouve bien au bon endroit)
et voici les réponses :

pingouinux a écrit :

Ne serait-ce pas plutôt ceci :

echo runP.txt | ../run_x86_64

non, je te confirme bien que l'extension n'est pas nécessaire (car je pense que le programme doit l'ajouter au nom que je lui donne).
la commande

echo runP | ../run_x86_64

fonctionne parfaitement (j'ai toujours utilisé ceci).

pingouinux a écrit :
../run_x86_64 <runP.txt 

je ne connais pas ceci. je viens de tester et ça ne fonctionne pas car en interne le logiciel me dit qu'il ne trouve pas un fichier dont il a besoin...

pingouinux a écrit :

Ceci ne ressemble pas à une bibliothèque mais à un fichier d'en-tête, qui ne sert qu'à la compilation et pas à l'exécution.

ah OK, c'est bien possible. En tout cas je sais que lorsque des noms internes au programme doivent être modifié c'est ici
que c'est fait et ces mêmes noms sont utilisés dans le fichier runP.txt

pingouinux a écrit :

Que donnent ces commandes :

cd /home/cedric/programThom
file run_x86_64 libr.h input/runP.txt

run_x86_64 : ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically lined (uses shared libs),
for GNU/linux 2.6.24, Build ID[sha1]= ................................;, not stripped
libr.h : ASCII text
input/runP.txt : ASCII test

pingouinux a écrit :
ldd run_x86_64

linux-vdso.so.1 => (0x000........)
libgfortran.so.3 => /usr/lib/x86_64-linux-gnu/libgfortran.so.3 (0x000........)
libm.so.6 => /usr/lib/x86_64-linux-gnu/llibm.so.6 (0x000........)
libc.so.6 => /usr/lib/x86_64-linux-gnu/llibc.so.6 (0x000........)
libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0 (0x000........)
/lib64/ld-linux-x86-64.so.2 (0x000........)

Dernière modification par 21did21 (Le 13/12/2012, à 22:33)

Hors ligne

#6 Le 13/12/2012, à 21:52

tiramiseb

Re : lien entre executable, librairie, pointeurs (en mode console)

pingouinux a écrit :

@tiramiseb : Oh m...., je me suis planté… Merci de l'avoir signalé.

en plus j'ai dû relire 3 fois ton message avant de voir ce qui gênait mon inconscient big_smile


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXe siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#7 Le 13/12/2012, à 21:57

21did21

Re : lien entre executable, librairie, pointeurs (en mode console)

lorsque ça plante (c'est à dire lorsque mon dossier "input" est hors de mon dossier "program" le logiciel démarre et m'inscrit :

"coefficient non reconnu : beta"

ce coefficient "beta" ce trouve dans "runP.txt" (où je lui donne une valeure) et dans "libs.h" qui sert à l'executable

ps: je pense à un truc, il est possible que mon executable aille cherche des informations ailleurs sur mon PC de manière transparente pour moi (je dis ça car j'ai un autre dossier sur
mon PC qui est en lien avec ce program -> il contient des sources compilées).

ps2: je me rappel bien à l'époque où ça avait été installé sur mon PC que la personne avait jsute fait un toute petite manip pour pouvoir lancer le programme runX86_64
à partir d'un autre dossier et j'ai pris des notes sur mon cahier et j'avais marqué quelque chose qui commence par "ln -s /" et qui fini par  "libs.h"

Hors ligne

#8 Le 13/12/2012, à 21:59

21did21

Re : lien entre executable, librairie, pointeurs (en mode console)

tiramiseb a écrit :

pingouinux> achtung, tu as mélangé echo et cat smile

il a écrit

echo runP | ../run_x86_64

pas

cat runP | ../run_x86_64

donc ta correction est fausse smile

j'ai essayé la commande "cat" (sans comprendre ce que c'est...) dans mon cas qui fonctionne et cette commande plante contrairement à "echo"

ps: que fait cat ?

Hors ligne

#9 Le 13/12/2012, à 22:04

tiramiseb

Re : lien entre executable, librairie, pointeurs (en mode console)

"echo XXX | YYY" envoie la chaîne "XXX" en entrée du programme "YYY"
"cat XXX | YYY" envoie le contenu du fichier "XXX" en entrée du programme "YYY"

man echo
man cat

Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXe siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

Hors ligne

#10 Le 13/12/2012, à 22:20

pingouinux

Re : lien entre executable, librairie, pointeurs (en mode console)

Est-ce libr.h (en #1), ou bien libs.h (en #7) ?
Si on suppose que ton exécutable cherche ce fichier dans le répertoire parent de celui d'où il est lancé, tu peux essayer ceci :

ln -s /home/cedric/programThom/libr.h /home/cedric

Hors ligne

#11 Le 13/12/2012, à 22:34

21did21

Re : lien entre executable, librairie, pointeurs (en mode console)

pingouinux a écrit :

Est-ce libr.h (en #1), ou bien libs.h (en #7) ?
Si on suppose que ton exécutable cherche ce fichier dans le répertoire parent de celui d'où il est lancé, tu peux essayer ceci :

ln -s /home/cedric/programThom/libr.h /home/cedric

c'est bien libr désolé j'ai fais une erreur de frappe.

-> j'ai essayé la commande que tu m'as dit "ln -s" un peu partout pour essayé d'en avoir un qui fonctionne et ça plante toujours,
je ne comprends pas....

en tout cas merci de ton aide

Hors ligne

#12 Le 13/12/2012, à 22:59

pingouinux

Re : lien entre executable, librairie, pointeurs (en mode console)

21did21 #7 a écrit :

"coefficient non reconnu : beta"
ce coefficient "beta" ce trouve dans "runP.txt" (où je lui donne une valeure) et dans "libs.h" qui sert à l'executable

C'est peut-être runP.txt qui pose un problème. À défaut de savoir comment est organisé ton programme, il faut y aller à tâtons. Il faut peut-être qu'il se trouve dans le répertoire d'où est lancé l'exécutable. Essaye :

ln -s /home/cedric/programThom/input/runP.txt /home/cedric/input1

Hors ligne

#13 Le 13/12/2012, à 23:26

21did21

Re : lien entre executable, librairie, pointeurs (en mode console)

merci de ton aide pingouinnux je vais chercher dans cette voie smile

-> au moins j'ai compris la démarche et je pense que je vais arriver à me débrouiller à présent.
merci beaucoup !!!!

Hors ligne

#14 Le 13/12/2012, à 23:38

21did21

Re : lien entre executable, librairie, pointeurs (en mode console)

c'est bon j'ai trouvé ! merci beaucoup !
(je ne sais pas exactement encore c'etait où car j'en ai foutu partout ;-) je vais les supprimer 1par1 pour voir celui qui posais probleme.)

A bientôt et encore merci !!!

Hors ligne

Haut de page ↑