Contenu | Rechercher | Menus

Annonce

Le forum rencontre en ce moment quelques soucis de charge, il est possible qu'une erreur soit affichée quand vous postez un message, ne rechargez pas la page au risque de poster une seconde fois votre message

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".

nombre réponses : 13

#0 -1 »  [RESOLU] Utilisation gdb sur bibliothèque dynamique : cas simple en C » Le 26/02/2013, à 15:40

henrid
Réponses : 1

Bonjour,

J'ai un souci pour débugger une bibliothèque dynamique. Je suis parti d'un exemple très simple.
J'ai trois fichiers *.c :
- example.c (le fichier principal)
- addition.c
- multiplication.c
Mon propos est de mettre addition.c et multiplication.c en bibliothèque, puis d'utiliser gdb pour débugger.
Ca marche bien si je suis en bibliothèque statique ( .a), mais ça ne marche pas si j'utilise une bibliothèque dynamique (.so).

Voici le contenu de ces fichiers .c :

example.c :

#include "../include/header.h"

int main()
{
int result;
result = addition(1,2);
printf("addition result is : %d\n",result);
result = multiplication(3,2);
printf("multiplication result is :  %d\n",result);
}

addition.c :

int addition(int a,int b)
{
int result;
result = a + b;
return result;
}

multiplication.c :

int multiplication(int a, int b)
{
int result;
result = a * b;
return result;
}

voici les différentes étapes :

pour la bibliothèque statique :

gcc -c -g *.c                                        // creation des fichiers objets principal.o, addition.o, multiplication.o
ar -cr libhdemath.a addition.o multiplication.o      // creation de la bibliothèque statique libhdemath.a
sudo cp libhdemath2.a /usr/lib                       // copie de la bibliothèque vers le répertoire adéquate
gcc -g example.o -lhdemath -o example                // création de l'exécutable example 
gdb example                                          // lancement de gdb sur example 
info sources                                         // info sur la table des symboles

=> je retrouve mes trois fichiers .c
je peux alors débugger les fichiers de ma bibliothèque libhdemath.a.

pour la bibliothèque dynamique :

gcc -c -g *.c                                                   // creation des fichiers objets principal.o, addition.o, multiplication.o
gcc -g -o libhdemath2.so -shared  addition.o multiplication.o   // creation de la bibliothèque dynamique libhdemath2.so
sudo cp libhdemath2.so /usr/lib                                  // copie de la bibliothèque vers le répertoire adéquate
gcc -g example.o -lhdemath2 -o example                          // création de l'exécutable example (pas nécessaire de mettre -g je pense) 
gdb example                                                     // lancement de gdb sur example 
info sources                                                    // info sur les fichiers sources que je peux débugger

=> je ne retrouve que example.c
donc je ne peux pas débugger les fichiers de ma bibliothèque dynamique libhdemath2.So

Pourquoi ? Une idée ?
je voudrais utiliser gdb pour ma bibliothèque dynamique sad
A noter que si je fais une modif dans le fichier addition.c et que je relance le processus de création de bibliothèque dynamique et de mon exécutable example, je vois bien ma modif a l'exécution de example.

Merci pour votre aide

#1 Re : -1 »  [RESOLU] Utilisation gdb sur bibliothèque dynamique : cas simple en C » Le 27/02/2013, à 12:53

henrid
Réponses : 1

je crois que j'ai compris !
je poste, si jamais ça intéresse quelqu'un.
Contrairement à la librairie statique, la librairie dynamique est indépendante de l'exécutable. Elle est seulement chargée à l'appel d'une fonciton de la librairie.
Donc gdb ne voit pas son contenu tant que le programme ne l'a pas appelé.

falucid@fullanalyze:~/HDE_TESTS/MATHS/test1/src$ gdb example
GNU gdb (GDB) 7.1-ubuntu
Copyright (C) 2010 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 "i486-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/falucid/HDE_TESTS/MATHS/test1/src/example...done.
(gdb) info sources
Source files for which symbols have been read in:



Source files for which symbols will be read in on demand:

/home/falucid/HDE_TESTS/MATHS/test1/src/example.c
(gdb) b addition.c:3
No source file named addition.c.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (addition.c:3) pending.
(gdb) run
Starting program: /home/falucid/HDE_TESTS/MATHS/test1/src/example 
-> entree main !

Breakpoint 1, addition (a=1, b=2) at addition.c:3
3	printf("-> HDE entree addition!\n");
(gdb) c
Continuing.
-> HDE entree addition!
-> HDE sortie addition!
addition result is : 3
-> HDE entree multiplication ! 
-> HDE sortie multiplication !
multiplication result is :  6

Program exited with code 036.
(gdb) info sources
Source files for which symbols have been read in:

/home/falucid/HDE_TESTS/MATHS/test1/src/addition.c

Source files for which symbols will be read in on demand:

/home/falucid/HDE_TESTS/MATHS/test1/src/example.c, /home/falucid/HDE_TESTS/MATHS/test1/src/multiplication.c
(gdb) 

je résouds cette demande.

#2 -1 »  [RESOLU] librairie dynamique en C : LD_LIBRARY_PATH est vide » Le 21/02/2013, à 18:12

henrid
Réponses : 3

Bonjour,

Petite question sur la variable d'environnement LD_LIBRARY_PATH :

Je lance mon programme exampledyn construit simplement pour me familiariser avec la construction de librairies, qui utilise libarith.so qui est situé dans le répertoire de lancement.

fa@fa:~/HDE_TESTS/MATHS$ ./exampledyn
./exampledyn: error while loading shared libraries: libarith.so: cannot open shared object file: No such file or directory

J'affiche le contenu de ma variable LD_LIBRARY_PATH :

fa@fa:~/HDE_TESTS/MATHS$ echo $LD_LIBRARY_PATH

fa@fa:~/HDE_TESTS/MATHS$ 

La variable LD_LIBRARY_PATH est vide.
je place ma librairie libarith.so dans /usr/lib
Je relance mon programme ... ça marche. Pourquoi ça marche puisque LD_LIBRARY_PATH est vide ?

Merci

#3 Re : -1 »  [RESOLU] librairie dynamique en C : LD_LIBRARY_PATH est vide » Le 22/02/2013, à 11:36

henrid
Réponses : 3

Merci pour ces infos Grim7 et Claudius, je résouds la fiche.
henri

#4 -1 »  montage samba de 2 machines virtuelles Ubuntu vers XP » Le 14/02/2013, à 17:36

henrid
Réponses : 5

Bonjour,

J'ai un système hote Windows XP. J'ai une machine virtuelle Linux Ubuntu Gutsy montée sur virtual box .
J'ai fait un montage samba sur la machine (je n'utilise pas le partage de dossier de Virtual Box), côté Linux: 

sudo /sbin/mount.cifs //pc340032/repxp /mnt/repxp -o uid=1000,guid=1000,username=fagutsy,password=****,iocharchet=utf8

une commande ls-l  sur /mnt :

drwxrwxrwx 1 fagutsy fagutsy 0 2013-02-14 15:12 repxp

côté Windows :
j'ai déclaré un nouvel utilisateur sur Windows XP , fagutsy. Le dossier repxp est partagé, l'utilisateur fagutsy a tous les droits sur le partage, ce qui n'est pas le cas des autres utilisateurs. Au niveau de la sécurité, tout est permis pour tout le monde sur le répertoire repxp. 

J'ai ensuite créé une nouvelle machine virtuelle Linux Ubuntu, Lucid sur Virtual Box.
L'utilisateur s'appelle falucid. Je cherche également à accéder au répertoire repxp de Windows, déjà partagé avec Gutsy :

sudo /sbin/mount.cifs //pc340032/repxp /mnt/repxp -o uid=1000,guid=1000,username=falucid,password=****,iocharchet=utf8
mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) 

Le répertoire repxp est bien créé depuis /mnt et les droits sont  :

drwxrwxrwx 2 falucid falucid 4096 2013-02-14 12:08 repxp 

Côté windows , j'avais créé un utilisateur falucid, avec les mêmes droits sur repxp que l'utilisateur fagutsy.

Si j'enlève les informations sur le username et le password dans la commande mount.cifs, le montage se fait correctement, mais à noter que les propriétés du répertoire repxp sur /mnt ont changées, le groupe est maintenant root, et il existe un lien symbolique :

drwxr-xr-x 1 falucid root       0 2013-02-14 16:02 repxp

Alors je lance la commande suivante :

falucid@fa:/mnt$ sudo chown :falucid repxp
chown: modification du groupe de «repxp»: Permission non accordée

De plus les fichiers partagé à l'intérieur de repxp ont également ces caractéristiques propriétaire/groupe : falucid/root.
Il est impossible d'enlever ou de créer un fichier à l'intérieur de repxp :

falucid@fa:/mnt/repxp$ sudo rm toto
rm: impossible de supprimer «toto»: Permission non accordée
falucid@fa:/mnt/repxp$ touch tot2
touch: impossible de faire un touch «tot2»: Permission non accordée

Du côté de la machine Gutsy, repxp à les caractéristiques propriétaire/groupe : fagutsy/fagutsy.
Et il est possible d'écrire dans le répertoire depuis linux.

Pourquoi le montage n'a pas pu se faire sur Lucid comme il a été fait pour Gutsy ?
Pourquoi je ne peux pas écrire dans repxp depuis Lucid ?

Merci pour votre aide.

#5 Re : -1 »  montage samba de 2 machines virtuelles Ubuntu vers XP » Le 14/02/2013, à 18:29

henrid
Réponses : 5

sur gutsy j'ai :

fa@fa-VM:/mnt$ apt-cache show samba | grep "Version"
Version: 3.0.26a-1ubuntu2.5
Version: 3.0.26a-1ubuntu2

#6 Re : -1 »  montage samba de 2 machines virtuelles Ubuntu vers XP » Le 15/02/2013, à 10:28

henrid
Réponses : 5

j'ai monté le disque en spécifiant le user  :

sudo /sbin/mount.cifs //pc340032/repxp /mnt/repxp -o uid=1000,guid=1000,username=fagutsy,password=****,iocharchet=utf8

pour fagutsy.

et pour falucid :

sudo /sbin/mount.cifs //pc340032/repxp /mnt/repxp -o uid=1000,guid=1000,username=falucid,password=****,iocharchet=utf8

Est-ce que ça répond à ta question ou je ne l'ai pas comprise ?

Pour le contrôle total sur Windows, je n'ai pas cherché à filtrer, pour le moment je n'en ai pas besoin.

Merci pour ton intérêt smile

#7 Re : -1 »  montage samba de 2 machines virtuelles Ubuntu vers XP » Le 15/02/2013, à 10:42

henrid
Réponses : 5

je viens d'essayer ceci sur Lucid :

 sudo /sbin/mount.cifs //pc340032/repxp /mnt/repxp -o uid=1000,guid=1000,username=fagutsy,password=****,iocharchet=utf8

Donc en utilisant le username utilisé pour Gutsy.
Le montage est fait correctement et je peux écrire sur Lucid sur le répertoire partagé.
Peut-être il doit y avoir un souci avec les comptes définis sur Windows, pourtant ils ont les mêmes droits...  Je laisse le sujet un peu ouvert , même si j'ai une solution, je ne la comprends pas.

#8 -1 »  (RESOLU) probleme de comptabilité d'un programme entre GUTSY et LUCID » Le 12/02/2013, à 20:10

henrid
Réponses : 2

Bonjour ,

je souhaite installer sur Ubuntu Lucid 32 bits un logiciel développé en C++ il y a 4/5 ans sous Ubuntu Gutsy,
C'est un gros produit.
je n'ai pas eu de problème à l'installation et à la compilation.
A l'exécution j'ai le problème suivant :

fa@fa:~/Applications/FAREADY/C++/FA/build$./FA 
./FA: error while loading shared libraries: libxerces-c.so.27: cannot open shared object file: No such file or directory

j'ai fait une recherche depuis la racine sur 'libxerces*' :

fa@fa:/$ sudo find . -name 'libxerces*' -print 2>/dev/null 
[sudo] password for fa: 
./usr/share/lintian/overrides/libxerces-c28
./usr/share/lintian/overrides/libxerces-c3.1
./usr/share/doc/libxerces-c28
./usr/share/doc/libxerces-c-dev
./usr/share/doc/libxerces-c3.1
./usr/lib/libxerces-c.a
./usr/lib/libxerces-c-3.1.so
./usr/lib/libxerces-c.so
./usr/lib/libxerces-depdom.so.28.0
./usr/lib/libxerces-c.la
./usr/lib/libxerces-c.so.28.0
./usr/lib/libxerces-c.so.28
./usr/lib/libxerces-depdom.so.28
./var/cache/apt/archives/libxerces-c-dev_3.1.0-1_i386.deb
./var/cache/apt/archives/libxerces-c2-dev_2.8.0+deb1-2build1_i386.deb
./var/cache/apt/archives/libxerces-c3.1_3.1.0-1_i386.deb
./var/cache/apt/archives/libxerces-c28_2.8.0+deb1-2build1_i386.deb
./var/lib/dpkg/info/libxerces-c3.1.postrm
./var/lib/dpkg/info/libxerces-c-dev.md5sums
./var/lib/dpkg/info/libxerces-c28.md5sums
./var/lib/dpkg/info/libxerces-c3.1.postinst
./var/lib/dpkg/info/libxerces-c-dev.list
./var/lib/dpkg/info/libxerces-c3.1.md5sums
./var/lib/dpkg/info/libxerces-c28.postrm
./var/lib/dpkg/info/libxerces-c3.1.shlibs
./var/lib/dpkg/info/libxerces-c28.shlibs
./var/lib/dpkg/info/libxerces-c3.1.list
./var/lib/dpkg/info/libxerces-c28.list
./var/lib/dpkg/info/libxerces-c28.postinst

Donc je me suis mis à chercher la version libxerces-c.so.27, je n'ai pas trouvé d'endroit où la récupérer.
Bon et puis il y a des liens à mettre en place , mais je suppose que je peux me débrouiller pour les mettre à la main ? 

fa@fa:/usr/lib$ ls *libxerces* -lrt 
-rw-r--r-- 1 root root  440024 2010-01-14 21:17 libxerces-depdom.so.28.0
-rw-r--r-- 1 root root 3881496 2010-01-14 21:17 libxerces-c.so.28.0
-rw-r--r-- 1 root root    1014 2010-03-01 20:38 libxerces-c.la
-rw-r--r-- 1 root root 3704860 2010-03-01 20:38 libxerces-c-3.1.so
-rw-r--r-- 1 root root 9395088 2010-03-01 20:38 libxerces-c.a
lrwxrwxrwx 1 root root      24 2013-02-01 12:08 libxerces-depdom.so.28 -> libxerces-depdom.so.28.0
lrwxrwxrwx 1 root root      19 2013-02-01 12:08 libxerces-c.so.28 -> libxerces-c.so.28.0
lrwxrwxrwx 1 root root      18 2013-02-12 17:39 libxerces-c.so -> libxerces-c-3.1.so

Merci pour vos conseils et avis.

#9 Re : -1 »  (RESOLU) probleme de comptabilité d'un programme entre GUTSY et LUCID » Le 13/02/2013, à 16:10

henrid
Réponses : 2

Merci pour votre réponse Alca.
Je n'avais pas trouvé via le site http://packages.ubuntu.com/,
mais j'ai finalement trouvé le package pour Fedora http://rpmfind.net//linux/RPM/fedora/15 … .i686.html,
que j'ai converti en .deb.

#10 -1 »  (RESOLU) installation Qt sdk » Le 22/01/2013, à 18:19

henrid
Réponses : 2

Bonjour,

je n'arrive pas à installer Qt-sdk .
Je m'inspire de la page : http://doc.ubuntu-fr.org/qt-creator
la commande  :

sudo apt-get install qt-sdk

renvoie une erreur : E : impossible de trouver le paquet qt-sdk

je suis sur ubuntu Gutsy 7.10 en 32 bits, sur une virtual box , hote : Windows.

Merci pour votre aide !

#11 Re : -1 »  (RESOLU) installation Qt sdk » Le 22/01/2013, à 19:02

henrid
Réponses : 2

à noter que le fichier sources.list dans /etc/apt contient bien les adresses, non commentées.

#12 -1 »  (RESOLU) copie fichier impossible, même en root » Le 12/09/2012, à 17:07

henrid
Réponses : 1

bonjour,

j'ai installé sous windows xp une virtual box avec un environnement ubuntu.
J'ai fait un pont de montage via samba (clic droit sur le répertoire à partager sous windows xp, puis partage, et commande sudo mount -t cifs //adresse ip/Henri/chantiers /mnt)
j'ai bien mes fichiers windows lisibles dans le répertoire mnt sous linux.
Par contre sous linux je ne peux pas écrire dans ce répertoire en commande ni supprimer des fichiers :

-rwxrwxrwx   1 root root    56 2012-09-12 15:13 commande.txt
drwxr-xr-x  12 root root 13640 2012-09-12 15:32 dev
drwxrwxrwt  10 root root  4096 2012-09-12 15:50 tmp
drwxrwxrwx   1 root root     0 2012-09-12 16:24 mnt
-rwxrwSrwt   1 root root   468 2012-09-12 16:25 log.txt
root@fullanalyze-VM:/# sudo cp commande.txt /mnt
cp: ne peut créer le fichier régulier `/mnt/commande.txt': Permission non accordée
root@fullanalyze-VM:/#

Je suis connecté en root, et les droits du fichiers commande.txt et du répertoire mnt ne sont pas restrictifs ils me semble.
Avez-vous une idée ?
si je fais une copie vers le répertoire /tmp je n'ai pas de souci. Donc ça provient bien du répertoire mnt.

Merci