Compilation dans shell / dans commande unix
jeanne38
Messages postés
10
Statut
Membre
-
dubcek Messages postés 19021 Statut Contributeur -
dubcek Messages postés 19021 Statut Contributeur -
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
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:
- Compilation dans shell / dans commande unix
- Invite de commande - Guide
- Classic shell - Télécharger - Personnalisation
- Commande terminal mac - Guide
- Diskpart commande - Guide
- Commande dism - Guide
9 réponses
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 ...
************************************************************************
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 ...
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 ...
> echo $?
0
J'ai fait afficher $? pour savoir quel était le code d'erreur, mais ça ne m'avance pas plus finalement ...
"$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
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 ...
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 ...