Compilation dans shell / dans commande unix

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. Il semblerait que ton $CC soit un répertoire et pas un programme.
    0
    1. hello
      supprimer > /dev/null 2>&1
      pour voir les messages
      que content $CC ?
      0
      1. 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
        1. ces messages d'erreurs c'est toi qui les affiche
          après ta compile en ligne que répond
          echo $?
          0
          1. > /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
            1. "$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
              1. 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
                1. NNOONN
                  "$CC" /tmp/$TMP.c -o /tmp/$TMP enlève ça : > /dev/null 2>&1
                  0
                  1. 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. bizarre parce ce sont juste des redirections !! tu as enlevé les guillemets autour de $CC ?
                      0
                    2. @dubcekOui 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
                    3. @jeanne38si 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