Compilation dans shell / dans commande unix

jeanne38 Messages postés 9 Date d'inscription   Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis en train de tester des options de compilations sous linux ix86 et j'ai un problème.

Dans un programme shell, je teste la compilation d'un programme C minimaliste :
-----------------------------------------------------------
TMP=test_$$
cat > $TMP.c << \EOF

#include <stdio.h>
int main ()
{
puts ("Hello Vasy");
return 0;
}
EOF

"$CC" $TMP.c -o $TMP > /dev/null 2>&1

CODE_ERREUR=$?

if [ $CODE_ERREUR -ne 0 ]
then
echo "Error code : $CODE_ERREUR"
echo "*** \`\`$CC'' failed to compile a minimal C program"
echo "==> Check that your C compiler is installed properly"
...............
-----------------------------------------------------------

Cette compilation echoue :
Error code : 127
*** ``/opt/sun/sunstudio12/bin/suncc -lgcc -L/usr/lib/gcc/i486-linux-gnu/4.1.2/'' failed to compile a minimal C program
==> Check that your C compiler is installed properly

Lorsque je compile le même programme minimaliste directement sous linux :
/opt/sun/sunstudio12/bin/suncc -lgcc -L/usr/lib/gcc/i486-linux-gnu/4.1.2/ /tmp/toto.c -o /tmp/toto

Ca compile nickel et l'execution du programme toto affiche :
Hello Vasy

Je suis perdue ... si vous pouviez m'aider !!
Merci !!

Jeanne
Configuration: Solaris
Firefox 2.0.0.15

9 réponses

  1. (Pabix) Messages postés 600 Statut Membre 81
     
    Il semblerait que ton $CC soit un répertoire et pas un programme.
    0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    supprimer > /dev/null 2>&1
    pour voir les messages
    que content $CC ?
    0
  3. jeanne38
     
    J'ai ajouté des traces d'execution :
    ************************************************************************
    CHECK_C_COMPILER () {
    # compilation et execution d'un programme C minimal
    TMP=test_$$
    cat > /tmp/$TMP.c << \EOF

    #include <stdio.h>
    int main ()
    {
    puts ("Hello Vasy");
    return 0;
    }
    EOF

    echo "CC=$CC /tmp/$TMP.c -o /tmp/$TMP"
    "$CC" /tmp/$TMP.c -o /tmp/$TMP > /dev/null 2>&1

    CODE_ERREUR=$?

    if [ $CODE_ERREUR -ne 0 ]
    then
    echo "Error code : $CODE_ERREUR"
    ...
    ************************************************************************

    résultat sous linux :

    CC=/opt/sun/sunstudio12/bin/suncc -lgcc -L/usr/lib/gcc/i486-linux-gnu/4.1.2/ /tmp/test_8116.c -o /tmp/test_8116
    Error code : 127
    *** ``/opt/sun/sunstudio12/bin/suncc -lgcc -L/usr/lib/gcc/i486-linux-gnu/4.1.2/'' failed to compile a minimal C program
    ==> Check that your C compiler is installed properly

    Et quand je copie colle sous linux la ligne "CC=" :
    > /opt/sun/sunstudio12/bin/suncc -lgcc -L/usr/lib/gcc/i486-linux-gnu/4.1.2/ /tmp/test_8116.c -o /tmp/test_8116

    aucun message d'erreur ! la compilation s'est bien déroulée puisqu'ensuite je fais :

    > /tmp/test_8116
    Hello Vasy

    Il m'affiche bien le résultat de mon petit programme C minimaliste.

    Dans la ligne d'appel au compilteur suncc, il n'y a pas de variable qui serait propre à mon programme shell et inconnue en dehors, alors je ne vois pas où est la différence ...
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    ces messages d'erreurs c'est toi qui les affiche
    après ta compile en ligne que répond
    echo $?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jeanne38
     
    > /opt/sun/sunstudio12/bin/suncc -lgcc -L/usr/lib/gcc/i486-linux-gnu/4.1.2/ /tmp/test_8116.c -o /tmp/test_8116
    > echo $?
    0

    J'ai fait afficher $? pour savoir quel était le code d'erreur, mais ça ne m'avance pas plus finalement ...
    0
  7. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    "$CC" /tmp/$TMP.c -o /tmp/$TMP > /dev/null 2>&1
    
    CODE_ERREUR=$?
    
    if [ $CODE_ERREUR -ne 0 ]
    then
    echo "Error code : $CODE_ERREUR" 


    enlève tout sauf $CC /tmp/$TMP.c -o /tmp/$TMP
    0
  8. jeanne38
     
    Bonjour,

    j'ai mis tout ce que tu me disais en commentaires, en laissant la suite de l'execution "normale" :
    (j'ai enlevé aussi la variable CODE_ERREUR)

    **********************************************************************************************************
    echo "CC=$CC /tmp/$TMP.c -o /tmp/$TMP"
    # "$CC" $TMP.c -o $TMP > /dev/null 2>&1
    "$CC" /tmp/$TMP.c -o /tmp/$TMP > /dev/null 2>&1

    # if [ $? -ne 0 ]
    # then
    # echo "*** \`\`$CC'' failed to compile a minimal C program"
    # echo "==> Check that your C compiler is installed properly"
    # else
    test "`./$TMP 2>/dev/null`" = "Hello Vasy"
    RESULT=$?
    if [ $RESULT -ne 0 ]
    then
    echo "*** A minimal C program compiled using \`\`$CC'' did not execute properly"
    if [ \( "$ARCH" = "iX86" -o "$ARCH" = "x64" -o "$ARCH" = "ia64" \) -a "`basename "$CC"`" = "icc" ]
    then
    # cas du compilateur icc pour Linux pour lequel
    # $LD_LIBRARY_PATH doit etre positionnee pour
    # executer les binaires produits par icc avec
    # edition dynamique de liens
    echo "==> Set variable \`\`\$LD_LIBRARY_PATH'' to access the Intel CC runtime library"
    echo " (e.g., `dirname $CC`/../lib)"
    else
    echo "==> Check that your C compiler is installed properly"
    fi
    fi
    # fi
    # rm -f $TMP.c $TMP $TMP.exe

    Sans surprise, ça plante lors de : test "`./$TMP 2>/dev/null`" = "Hello Vasy"
    Mêmes messages d'erreur, sauf que cette fois ce n'est pas à la compilation qu'il rale mais à l'execution (le programme n'existe pas, puisqu'il n'a pas pu être compilé)

    CC=/opt/sun/sunstudio12/bin/suncc -lgcc -L/usr/lib/gcc/i486-linux-gnu/4.1.2/ /tmp/test_9401.c -o /tmp/test_9401
    *** A minimal C program compiled using ``/opt/sun/sunstudio12/bin/suncc -lgcc -L/usr/lib/gcc/i486-linux-gnu/4.1.2/'' did not execute properly
    ==> Check that your C compiler is installed properly

    Pfouuuu c'est déprimant ...
    0
  9. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    NNOONN
    "$CC" /tmp/$TMP.c -o /tmp/$TMP enlève ça : > /dev/null 2>&1
    0
  10. jeanne38
     
    oups pardon ! :-)

    ok je l'ai enlevé
    je me retrouve avec uniquement : $CC /tmp/$TMP.c -o $TMP
    et ça marche !!

    Merci dubcek pour ton aide précieuse !! :-)))
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      bizarre parce ce sont juste des redirections !! tu as enlevé les guillemets autour de $CC ?
      0
      1. jeanne38 > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Oui j'ai noté :
        $CC /tmp/$TMP.c -o $TMP

        J'ai enlevé les " " autour de $CC : lorsque je les remets "$CC" ça merdoit à nouveau ...

        Tu penses que ce n'est pas bon comme ça ?
        0
      2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659 > jeanne38
         
        si si mais je ne pense pas que ce soit le fait d'enlever les redirections qui a résolu le problème, donc peut-être les "
        0