Compilation dans shell / dans commande unix

Fermé
jeanne38 Messages postés 9 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 24 mars 2009 - 27 oct. 2008 à 11:30
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 28 oct. 2008 à 17:19
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
A voir également:

9 réponses

(Pabix) Messages postés 578 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 27 octobre 2009 81
27 oct. 2008 à 18:56
Il semblerait que ton $CC soit un répertoire et pas un programme.
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
28 oct. 2008 à 09:27
hello
supprimer > /dev/null 2>&1
pour voir les messages
que content $CC ?
0
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
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
28 oct. 2008 à 15:23
ces messages d'erreurs c'est toi qui les affiche
après ta compile en ligne que répond
echo $?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
> /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
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
28 oct. 2008 à 15:54
"$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
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
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
28 oct. 2008 à 16:24
NNOONN
"$CC" /tmp/$TMP.c -o /tmp/$TMP enlève ça : > /dev/null 2>&1
0
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
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
28 oct. 2008 à 16:32
bizarre parce ce sont juste des redirections !! tu as enlevé les guillemets autour de $CC ?
0
jeanne38 > dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024
28 oct. 2008 à 16:54
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
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621 > jeanne38
28 oct. 2008 à 17:19
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