A voir également:
- Problème après mise à jour Fedora
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise a jour windows 10 - Accueil - Mise à jour
- Mise a jour chromecast - Accueil - Guide TV et vidéo
- Mise a jour kindle - Guide
- Mise a jour windows 7 - Accueil - Mise à jour
11 réponses
Bonjour,
Lance la commande suivante :
Note le résultat : c'est la liste des lib utilisées par ton programme.
La commande suivante te donnera tous les paquets mis à jour :
Vérifie s'il n'y a pas dedans une bibliothèque utilisée par ton programme C.
Si c'est le cas, à mon avis tu as juste à recompiler ton C.
Lance la commande suivante :
ldd /chemin/complet/vers/ton/programme
Note le résultat : c'est la liste des lib utilisées par ton programme.
La commande suivante te donnera tous les paquets mis à jour :
rpm -qa --last
Vérifie s'il n'y a pas dedans une bibliothèque utilisée par ton programme C.
Si c'est le cas, à mon avis tu as juste à recompiler ton C.
mamiemando
Messages postés
33367
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
19 novembre 2024
7 801
Modifié par mamiemando le 14/12/2011 à 10:46
Modifié par mamiemando le 14/12/2011 à 10:46
J'ai un grand problème dont ma vie en depend!!!!!
Oula rien que ça :-/
Après avoir installé la mise à jour de fedora, un programme C crucial ne fonctionne plus!!!
Ce programme effectue la connection entre un PC et un telemètre laser LMS200 et sauvegarde les données lues par lms.
Pré-requis : une bonne partie de ce qui suit requiert des droits root. Pour passer root dans un terminal, lance la commande :
1) Est-ce que tu as encore les sources de ce programme (fichiers .c, makefile etc...) ? Il est très probable que ce fichier soit lié à des librairies qui n'existe plus.
1)a) Si oui recompile-le et si des messages d'erreur apparaissent reporte-les nous.
1)b) Sinon, supposons que le chemin de l'exécutable soit /a/b/c/programme, que donne la commande :
En temps normal, toutes les librairies doivent être trouvées.
Exemple :
S'il en manque (not found), c'est que tu dois installer les paquets qui les installent. Sous fedora, yum permet de retrouver (avec l'option whatprovides) quel paquet fournit tel ou tel fichier. Une fois trouvé, il suffit de faire un "yum install ..." de cette librairie.
http://yum.baseurl.org/wiki/YumCommands
C'est l'approche que tu dois privilégier (par rapport à l'approche (2) qui n'est pas sûre de marcher)
2) Il se peut aussi que ton programme soit lié à une librairie qui est toujours installée, mais dont le numéro de version est différent. Normalement, linux utilise un mécanisme de lien symbolique pour éviter ce problème.
Exemple : j'ai pris une librairie au pif, peu importe laquelle tu considère c'est toujours le même principe
Ici tu vois qu'un programme lié à libraptor2.so.0 utilisera en réalité libraptor2.so.0.0.0. Les liens symboliques sont normalement créés automatiquement par ton gestionnaire de paquets (plus précisément par la commande ldconfig), qui fait appel à la commande ln.
Exemple : Ici on construit /usr/lib/libraptor2.so.0 qui pointe sur /usr/lib/libraptor2.so.0.0.0
En admettant que le numéro de version soit la cause du problème, tu peux toujours essayer de créer ce lien symbolique à la main, mais ce n'est pas garanti que ça marche (il est très probable que le programme se lance, mais ne trouve pas les "éléments" dont il a besoin dans le .so vers lequel tu l'auras réaiguillé).
Utilise la commande ls pour vérifier que le lien est bien construit (cf exemple ci-dessus), il doit être en bleu (sinon c'est que tu t'es trompée en le construisant).
Enfin ça ne coûte rien d'essayer, tu pourras toujours supprimer le lien symbolique avec la commande rm si ça ne marche pas.
3) Quand le programme "plante", quel message est écrit dans la console ?
Il fonctionnait à merveille avant mais maintenant il ne peut même pas passer l'étape d'initialisation.
J'aimerai revenir avant les 750 paquets mis à jour comment faire????
À mon avis c'est très difficilement réalisable.
PS: Le pc que j'utilise n'est pas le mien donc je ne peux pas faire tout ce qui me plait avec et il contient beaucoup de données ne me concernant pas => je ne peux pas réinstaller le système.....
Si tu as fait une mise à jour, c'est que tu as des droits root et donc que tu peux tout faire. Partant de là, pas de soucis.
Bon courage !
Oula rien que ça :-/
Après avoir installé la mise à jour de fedora, un programme C crucial ne fonctionne plus!!!
Ce programme effectue la connection entre un PC et un telemètre laser LMS200 et sauvegarde les données lues par lms.
Pré-requis : une bonne partie de ce qui suit requiert des droits root. Pour passer root dans un terminal, lance la commande :
su -
1) Est-ce que tu as encore les sources de ce programme (fichiers .c, makefile etc...) ? Il est très probable que ce fichier soit lié à des librairies qui n'existe plus.
1)a) Si oui recompile-le et si des messages d'erreur apparaissent reporte-les nous.
1)b) Sinon, supposons que le chemin de l'exécutable soit /a/b/c/programme, que donne la commande :
ldd /a/b/c/programme
En temps normal, toutes les librairies doivent être trouvées.
Exemple :
(mando@aldur) (~) $ ldd /bin/ls linux-vdso.so.1 => (0x00007fff85d6d000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007ff8fc4c5000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ff8fc2bd000) libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007ff8fc0b4000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff8fbd30000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff8fbb2c000) /lib64/ld-linux-x86-64.so.2 (0x00007ff8fc6fd000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff8fb90f000) libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007ff8fb70b000)
S'il en manque (not found), c'est que tu dois installer les paquets qui les installent. Sous fedora, yum permet de retrouver (avec l'option whatprovides) quel paquet fournit tel ou tel fichier. Une fois trouvé, il suffit de faire un "yum install ..." de cette librairie.
http://yum.baseurl.org/wiki/YumCommands
C'est l'approche que tu dois privilégier (par rapport à l'approche (2) qui n'est pas sûre de marcher)
2) Il se peut aussi que ton programme soit lié à une librairie qui est toujours installée, mais dont le numéro de version est différent. Normalement, linux utilise un mécanisme de lien symbolique pour éviter ce problème.
Exemple : j'ai pris une librairie au pif, peu importe laquelle tu considère c'est toujours le même principe
(mando@aldur) (~) $ ls -l --color /usr/lib/libraptor* lrwxrwxrwx 1 root root 19 nov. 28 04:07 /usr/lib/libraptor2.so.0 -> libraptor2.so.0.0.0 -rw-r--r-- 1 root root 427504 nov. 28 04:07 /usr/lib/libraptor2.so.0.0.0 lrwxrwxrwx 1 root root 18 août 26 17:41 /usr/lib/libraptor.so.1 -> libraptor.so.1.2.0 -rw-r--r-- 1 root root 426840 août 26 17:41 /usr/lib/libraptor.so.1.2.0
Ici tu vois qu'un programme lié à libraptor2.so.0 utilisera en réalité libraptor2.so.0.0.0. Les liens symboliques sont normalement créés automatiquement par ton gestionnaire de paquets (plus précisément par la commande ldconfig), qui fait appel à la commande ln.
Exemple : Ici on construit /usr/lib/libraptor2.so.0 qui pointe sur /usr/lib/libraptor2.so.0.0.0
ln -s /usr/lib/libraptor2.so.0.0.0 /usr/lib/libraptor2.so.0
En admettant que le numéro de version soit la cause du problème, tu peux toujours essayer de créer ce lien symbolique à la main, mais ce n'est pas garanti que ça marche (il est très probable que le programme se lance, mais ne trouve pas les "éléments" dont il a besoin dans le .so vers lequel tu l'auras réaiguillé).
Utilise la commande ls pour vérifier que le lien est bien construit (cf exemple ci-dessus), il doit être en bleu (sinon c'est que tu t'es trompée en le construisant).
ls -l --color /usr/lib/libraptor2.so.0
Enfin ça ne coûte rien d'essayer, tu pourras toujours supprimer le lien symbolique avec la commande rm si ça ne marche pas.
rm /usr/lib/libraptor2.so.0
3) Quand le programme "plante", quel message est écrit dans la console ?
Il fonctionnait à merveille avant mais maintenant il ne peut même pas passer l'étape d'initialisation.
J'aimerai revenir avant les 750 paquets mis à jour comment faire????
À mon avis c'est très difficilement réalisable.
PS: Le pc que j'utilise n'est pas le mien donc je ne peux pas faire tout ce qui me plait avec et il contient beaucoup de données ne me concernant pas => je ne peux pas réinstaller le système.....
Si tu as fait une mise à jour, c'est que tu as des droits root et donc que tu peux tout faire. Partant de là, pas de soucis.
Bon courage !
Bon, en executant la commande ldd ~/Bureau/testlms j'ai les resultats:
je ne peux pas utiliser la commande rpm -qa --list puisque j'ai fait la mise à jour de 750 paquets et que je ne sais pas dans lequel ou lesquels les librairies citées se trouvent!
J'ai le source du programme c et la recompilation se fait sans erreurs.
Quand le programme plante il n'affiche aucune erreur (il ne me donne pas la main jusqu'à ce que je fait ctrl-c)
en voici un exemple:
J'ai peut être les droits root mais je ne peux pas m'en servir quand je veux o'u je veux!
linux-gate.so.1 => (0x004d7000) libm.so.6 => /lib/libm.so.6 (0x002d8000) libc.so.6 => /lib/libc.so.6 (0x00b5a000) /lib/ld-linux.so.2 (0x00216000)
je ne peux pas utiliser la commande rpm -qa --list puisque j'ai fait la mise à jour de 750 paquets et que je ne sais pas dans lequel ou lesquels les librairies citées se trouvent!
J'ai le source du programme c et la recompilation se fait sans erreurs.
Quand le programme plante il n'affiche aucune erreur (il ne me donne pas la main jusqu'à ce que je fait ctrl-c)
en voici un exemple:
gdb testlms GNU gdb (GDB) Fedora (7.0.1-48.fc12) Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i686-redhat-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /root/Bureau/testlms...done. (gdb) run -n 1 -r 180 -s 1.0 -p /dev/ttyUSB0 Starting program: /root/Bureau/testlms -n 1 -r 180 -s 1.0 -p /dev/ttyUSB0 donnez nom du fichier pour evitement: obsNumero 12 ok 1: init lms ^C Program received signal SIGINT, Interrupt. 0x00cdd424 in __kernel_vsyscall () Missing separate debuginfos, use: debuginfo-install glibc-2.11.2-1.i686 (gdb) where #0 0x00cdd424 in __kernel_vsyscall () #1 0x002b9b83 in __open_nocancel () from /lib/libc.so.6 #2 0x08048dde in initLMS (serialdev=0xbffff459 "/dev/ttyUSB0", oldtio=0x804bd00) at lmsTest.c:235 #3 0x080499f9 in main (argc=9, argv=0xbffff264) at lmsTest.c:504 (gdb) up #1 0x002b9b83 in __open_nocancel () from /lib/libc.so.6 (gdb) up #2 0x08048dde in initLMS (serialdev=0xbffff459 "/dev/ttyUSB0", oldtio=0x804bd00) at lmsTest.c:235 warning: Source file is more recent than executable. 235 fd = open(serialdev, O_RDWR | O_NOCTTY ); (gdb)
J'ai peut être les droits root mais je ne peux pas m'en servir quand je veux o'u je veux!
jeanbi
Messages postés
15118
Date d'inscription
samedi 9 décembre 2006
Statut
Contributeur
Dernière intervention
6 février 2023
2 182
14 déc. 2011 à 15:42
14 déc. 2011 à 15:42
bonjour,
il suffit de recompiler le programme avec le kernel , le kernel a du être mis à jour !
make
make install pour reinstaller le .ko dans le bon kernel
perso ma cle usb tv tnt c'est comme cela que je suis oblige de faire à chaque changement de kernel.
pour etre sur , il suffit de lancer le programme dans la console
a+
il suffit de recompiler le programme avec le kernel , le kernel a du être mis à jour !
make
make install pour reinstaller le .ko dans le bon kernel
perso ma cle usb tv tnt c'est comme cela que je suis oblige de faire à chaque changement de kernel.
pour etre sur , il suffit de lancer le programme dans la console
a+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mamiemando
Messages postés
33367
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
19 novembre 2024
7 801
14 déc. 2011 à 19:33
14 déc. 2011 à 19:33
Pour les librairies tout à l'air ok. Pour la compilation, si les sources sont accompagnées d'un "configure", as-tu pensé à le lancer au préalable ?
Il y a quoi dans le fichier lmsTest.c aux alentours de la ligne 235 ? Si les sources sont disponibles publiquement, peux-tu les mettre à disposition quelque part pour qu'on tente de les compiler ?
Est-ce que le fichier /dev/ttyUSB0 existe ?
Bonne chance
./configure make
Il y a quoi dans le fichier lmsTest.c aux alentours de la ligne 235 ? Si les sources sont disponibles publiquement, peux-tu les mettre à disposition quelque part pour qu'on tente de les compiler ?
Est-ce que le fichier /dev/ttyUSB0 existe ?
ls -l /dev/ttyUSB0
Bonne chance
Le programme est compilé avec un simple gcc -o testlms -g -lm lmsTest.c
et dans /dev/ttyUSB0 il y a une carte PCI Express reconnue.
aux alentours de la ligne 235 il y a la fonction initLMS qui initialise le capteur sick lms 200 dont fd= open (serialdev, O_RDWR | O_NOCTTY) est la première instruction.
Vous pouvez trouver le source ici:
http://people.mech.kuleuven.be/~orocos/pub/stable/documentation/ocl/v1.10.x/api/html/SickLMS200_8cpp_source.html
et dans /dev/ttyUSB0 il y a une carte PCI Express reconnue.
aux alentours de la ligne 235 il y a la fonction initLMS qui initialise le capteur sick lms 200 dont fd= open (serialdev, O_RDWR | O_NOCTTY) est la première instruction.
Vous pouvez trouver le source ici:
http://people.mech.kuleuven.be/~orocos/pub/stable/documentation/ocl/v1.10.x/api/html/SickLMS200_8cpp_source.html
mamiemando
Messages postés
33367
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
19 novembre 2024
7 801
15 déc. 2011 à 01:01
15 déc. 2011 à 01:01
Le truc c'est que le doxygen ne m'aide pas vraiment, il me faudrait une archive avec les sources et le makefile, chose qui ne semble pas mise à disposition sur le lien que tu donnes.
Bonjour,
Il n'y a pas de makefile, je compile directement dans un terminal avec gcc.
Et le lien que j'ai mis contient les mêmes procedures utilisées dans mon programme.
Il n'y a pas de makefile, je compile directement dans un terminal avec gcc.
Et le lien que j'ai mis contient les mêmes procedures utilisées dans mon programme.
mamiemando
Messages postés
33367
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
19 novembre 2024
7 801
16 déc. 2011 à 19:52
16 déc. 2011 à 19:52
Est-ce que dans ce cas tu peux me transmettre une archive avec les sources que tu compiles (un truc que je peux tester de a à z) et la commande gcc qui tu utilises ?
Bonjour,
Est-ce que le problème peut être causé par le port série (la carte rs232 a besoin d'être reconfigurée aprés une mise à jour .....????)
En tout cas le port est détécté normalement:
J'ai pas essayé cette commande avant de faire la mise à jour donc est ce qu'il affichait ça avant? Je n'en ai aucune idée!
Je ne sais pas si j'ai raison! Ce n'ai qu'une supposition!!!
Que ce que vous en dites??
Est-ce que le problème peut être causé par le port série (la carte rs232 a besoin d'être reconfigurée aprés une mise à jour .....????)
En tout cas le port est détécté normalement:
ll /dev/ttyUSB0 crw-rw----. 2 root dialout 188, 0 déc. 22 12:01 /dev/ttyUSB0
J'ai pas essayé cette commande avant de faire la mise à jour donc est ce qu'il affichait ça avant? Je n'en ai aucune idée!
Je ne sais pas si j'ai raison! Ce n'ai qu'une supposition!!!
Que ce que vous en dites??