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 30/09/2018, à 10:35

fnux

[Résolu] Comment déterminer la configuration de gcc depuis un script?

Bonjour,

J'ai le même problème que celui présenté ici https://forum.ubuntu-fr.org/viewtopic.php?id=2026081

En effet, j'ai un script bash qui compile un programme aussi bien sur d'anciennes versions d'ubuntu (14.04 et 16.04) que sur la dernière (18.04) ainsi que sur d'autres distros et donc avec des paramétrages de gcc différents.

Pour obtenir des exécutables qui puissent être lancés (entre autre) par un double click, je compile ce programme sans l'option -no-pie avec les anciennes versions de g++ alors que je dois utiliser cette option pour la nouvelle version (gcc 7.x).

Ma question est donc soit :

a) y a-t-il une commande qui me permette de déterminer depuis ce script bash si gcc est configuré avec "--default-pie" ?

b) ou y a-t-il une commande qui me permette de déterminer depuis ce script bash si le fichier compilé est du type librairie partagée ou du type exécutable ?

Si je ne trouve pas de réponse à ma première option, la seconde (il est vrai moins élégante mais tout aussi efficace) me permettrait de compiler d'abord sans l'option -no-pie et si le résultat est une librairie partagée, de relancer cette compilation cette fois avec l'option -no-pie pour, dans un cas comme dans l'autre, obtenir un exécutable qui puisse être lancé par un double click quelque soit le paramétrage de gcc.

Merci d'avance de vos idées et suggestions.

Cordialement.

Dernière modification par fnux (Le 03/10/2018, à 22:22)


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The Froggies West Palm Beach Linux Association.

Hors ligne

#2 Le 30/09/2018, à 14:52

Watael

Re : [Résolu] Comment déterminer la configuration de gcc depuis un script?

salut,

gcc -v

RTFM!


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 01/10/2018, à 18:45

fnux

Re : [Résolu] Comment déterminer la configuration de gcc depuis un script?

Bonjour Watael,

Watael a écrit :

salut,

gcc -v

RTFM!

Merci de ta réponse, même si je ne sais pas ce que signifie RTFM!

J'aurai du être bien plus explicite bien qu'ayant précisé "depuis ce script".

En effet, la commande basique gcc -v affiche effectivement dans une console les paramètres de gcc ainsi que sa version.

Cependant, pour l'option a, comment récupérer ces informations dans un script bash (une variable) pour déterminer si l'option "--enable-default-pie" y est ou non ?

Désolé mais je ne suis pas assez compétent pour le faire.

D'autre part, pour l'option b, il doit bien y avoir une commande qui permet de déterminer le type des fichiers.

Exemples ci-dessous sous Xubuntu :

1) mon fichier source "test" compilé avec l'option "-no-pie" apparait comme un exécutable (dans le bas de la fenêtre du gestionnaire de fichiers):

test-1.png

2) et ici le même fichier source "test" compilé sans l'option "-no-pie" apparait alors comme une bibliothèque partagée :

test-2.png

Quelle est donc cette commande qui me serait fort utile ?

Merci d'avance de vos idées et suggestions et de votre temps.

Cordialement.


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The Froggies West Palm Beach Linux Association.

Hors ligne

#4 Le 03/10/2018, à 21:43

fnux

Re : [Résolu] Comment déterminer la configuration de gcc depuis un script?

Bon, j'ai trouvé les réponses à mes deux questions ailleurs !

Mais comme je suis sympa, je partage très volontiers les réponses ici car ça peut servir à d'autres et je clos ce thread.

Avec Debian et toutes les versions dérivées (LMDE, Mint, Ubuntu and Co etc.) on peut déterminer si gcc utilise l'option --enable-default-pie par la commande :

"$ if [ -n "`gcc -v -E 2>&1 | grep 'Configured with' | sed 's/--/\n--/g' | grep enable-default-pie`" ]; then echo "PIE DEFAULT"; else echo "PIE NOT DEFAULT"; fi"

J'ai donc résolu mon premier problème par la petite fonction suivante :

#
# test if the gcc setting is --enable-default-pie
#
check_gcc()
{
    if [ -n "`gcc -v -E 2>&1 | grep 'Configured with' | sed 's/--/\n--/g' | grep enable-default-pie`" ]
        then
            GCC_SETTING="1" # gcc uses the --enable-fefault-pie option
        else
            GCC_SETTING="0"
    fi
}
#
# use the 0 or 1 result as you need to
#

Ensuite, pour déterminer le type d'un fichier, la réponse est donnée par la commande :

"$ file --brief --mime-type file_name"

Si vous testez un fichier exécutable (ce qui était ma question précise), la réponse sera : application/x-executable

J'ai donc réglé mon second problème (test si un fichier est un exécutable ou autre chose) par la petite fonction suivante :

#
# test if the file type is executable
#
check_type()
{
    FILE_TYPE=$(file -b --mime-type $FILETOTEST)
    if [ $(file -b --mime-type $FILETOTEST) = "application/x-executable" ]
        then
            FILE_MIME="1" # the tested file is an executable
        else
            FILE_MIME="0"
    fi
  echo "The $FILETOTEST type is $FILE_TYPE and the mime type is $FILE_MIME ! "
}
FILETOTEST="myfile"
check_type $FILETOTEST
#
#  use the 0 or 1 result as you need to
#

Cordialement. cool

Dernière modification par fnux (Le 03/10/2018, à 22:20)


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The Froggies West Palm Beach Linux Association.

Hors ligne

#5 Le 04/10/2018, à 03:27

Watael

Re : [Résolu] Comment déterminer la configuration de gcc depuis un script?

voilà une bien belle commande bien inutilement redondante.
ça suffit ainsi :

gcc -v 2>&1 | grep -q '\s--enable-default-pie\s' && gccSettings=1 || gccSettings=0

et, si tu ne te sers pas de ce code plusieurs fois dans ton script, une fonction est aussi inutile. wink

NB: par convention, et afin d'éviter tout téléscopage, le nom des variables utilisateurs ne doit pas être tout en majuscules; seules les variables d'environnement (HOME, PATH...) peuvent l'être.

Dernière modification par Watael (Le 04/10/2018, à 03:28)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 06/10/2018, à 15:49

fnux

Re : [Résolu] Comment déterminer la configuration de gcc depuis un script?

Salut Watael,

Merci de ton post.

Watael a écrit :

voilà une bien belle commande bien inutilement redondante.
ça suffit ainsi :

gcc -v 2>&1 | grep -q '\s--enable-default-pie\s' && gccSettings=1 || gccSettings=0

Merci de ce racourci.

Watael a écrit :

et, si tu ne te sers pas de ce code plusieurs fois dans ton script, une fonction est aussi inutile. wink

Justement, j'utilise ce test à plusieus endroits, d'où une fonction (KISS).

Watael a écrit :

NB: par convention, et afin d'éviter tout téléscopage, le nom des variables utilisateurs ne doit pas être tout en majuscules; seules les variables d'environnement (HOME, PATH...) peuvent l'être.

Ce n'est qu'une question de convention et je reconnais n'y avoir pas été "bien élevé" (autodidacte).

Ceci dit, merci de ton aide et de tes conseils avisés. J'en tiendrai compte à l'avenir.

Cordialement.


N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The Froggies West Palm Beach Linux Association.

Hors ligne