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 16/09/2008, à 15:32

heuuuuu

[Resolu] L'inverse de la commande ldd

Bonjour,

Je cherche une commande qui ferait l'inverse de ldd : au lieu d'afficher les librairies dont dépend un programme ou une librairies, je souhaiterais afficher qui dépend de telle ou telle librairie.

Est-ce cette commande existe et quelqu'un la connaît-elle ?

J'ai bien peur qu'elle n'existe pas et qu'il faille faire un script pour cela, mais peut être que je me trompe...

Merci d'avance !

Dernière modification par heuuuuu (Le 16/09/2008, à 18:03)


Quand les avions en papier ne partent plus au vent
On se dit que l'bon temps passe finalement...
...comme une étoile filante
http://forum.ubuntu-fr.org/viewtopic.php?id=139410

Hors ligne

#2 Le 16/09/2008, à 17:58

tiky

Re : [Resolu] L'inverse de la commande ldd

Ça n'existe pas une telle commande, il faut utiliser un script pour faire ça.
Voilà un script reverseldd tongue

                                                                                                                                                                 
#!/bin/bash                                                                                                                                                                                                      
ld=$1                                                                                                                                                                                                            
dirs=( `echo $PATH | sed -e "s/:/ /g"` )                                                                                                                                                                         
files=( `find ${dirs[*]} -executable -type f` )                                                                                                                                                                  
for file in ${files[*]}                                                                                                                                                                                          
do                                                                                                                                                                                                               
    so=( `ldd $file 2> /dev/null | awk '{print $1}'` )                                                                                                                                      
    for s in ${so[*]}                                                                                                                                                                                            
    do                                                                                                                                                                                                           
        if [ $s = $ld ];                                                                                                                                                                                         
        then                                                                                                                                                                                                     
            echo $file                                                                                                                                                                                           
        fi                                                                                                                                                                                                       
    done                                                                                                                                                                                                         
done

Exemple d'utilisation:

~ $ ./reverseldd libSDL-1.2.so.0
/usr/bin/yuvplay
/usr/bin/kvm
/usr/bin/glmovie
/usr/bin/y4mhist
/usr/bin/showimage
/usr/bin/lavplay
/usr/bin/plaympeg
/usr/games/bin/exploder
/usr/games/bin/cutter
/usr/games/bin/wesnoth
/usr/games/bin/wesnoth_editor

Pour faire une recherche complète, il faut l'exécuter en root car beaucoup d'exécutables sont protégés en lecture.

Dernière modification par tiky (Le 17/09/2008, à 02:03)


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#3 Le 16/09/2008, à 18:02

heuuuuu

Re : [Resolu] L'inverse de la commande ldd

Merci smile


Quand les avions en papier ne partent plus au vent
On se dit que l'bon temps passe finalement...
...comme une étoile filante
http://forum.ubuntu-fr.org/viewtopic.php?id=139410

Hors ligne

#4 Le 17/09/2008, à 02:04

tiky

Re : [Resolu] L'inverse de la commande ldd

J'ai supprimé un sed inutile dans le script wink


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#5 Le 17/09/2008, à 17:31

nicolas66

Re : [Resolu] L'inverse de la commande ldd

lut, je me suis simplement permis de rajouter 2 trucs pr que ca soit prêt à l'emploi :

#!/bin/bash                                                                                                                                                                                                      
#########################################################################
# Filename    : reverse_ldd.sh                                          #
# Date        : 16/09/2008                                              #
# Author      : tiky (forum ubuntu-fr.org, post 252571)                 #
# License     : GPLv2                                                   #
# Description : search programs that use a specific library             #
#               -> use in root if possible                              #
# Example     : $ ./reverse_ldd.sh libSDL-1.2.so.0                      #
#               /usr/bin/yuvplay                                        #
#               /usr/bin/kvm                                            #
#               /usr/bin/glmovie                                        #
#               /usr/bin/y4mhist                                        #
#               /usr/bin/showimage                                      #
#               /usr/bin/lavplay                                        #
#               /usr/bin/plaympeg                                       #
#               /usr/games/bin/exploder                                 #
#               /usr/games/bin/cutter                                   #
#               /usr/games/bin/wesnoth                                  #
#               /usr/games/bin/wesnoth_editor                           #
#########################################################################

######### Functions #########
function usage()
{
	echo "usage: $0 library_filename" && exit 1
}

######## Input tests ########
if [ $# -ne 1 ]; then
	usage
fi

### Variables declaration ###
ld=$1
dirs=(`echo $PATH | sed -e "s/:/ /g"`)
files=(`find ${dirs[*]} -executable -type f`)


########### Core ############
for file in ${files[*]}
do
	so=(`ldd $file 2> /dev/null | awk '{print $1}'`)

	for s in ${so[*]}
	do
		if [ $s = $ld ]; then
			echo $file
		fi
	done
done

exit 0

Merci pour ce script smile

Dernière modification par nicolas66 (Le 18/09/2008, à 00:02)


"The computer was born to solve problems that did not exist before." (B. Gates)

Hors ligne

#6 Le 17/09/2008, à 18:01

tiky

Re : [Resolu] L'inverse de la commande ldd

De rien wink, précise qu'il est sous GPLv2, c'est le plus important tongue


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#7 Le 18/09/2008, à 00:02

nicolas66

Re : [Resolu] L'inverse de la commande ldd

Fait smile


"The computer was born to solve problems that did not exist before." (B. Gates)

Hors ligne