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

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