GCC et Mono

Résolu/Fermé
zaidoun - 20 juil. 2015 à 14:00
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 - 25 juil. 2015 à 11:06
Bonjour,


Je pense que j'ai une ambiguïté au niveau de compréhension sur la compilation croisé en effet ,La compilation croisée se définit par l'utilisation d'un compilateur spécifique pour créer un programme exécutable par une autre machine que la notre par conséquent ( le fichier.cs ) se compile par Mono la question ici
l'affichage de résultat par exemple "hello Word" est facile sur la même machine (PC) mais moi je veux rendre exécutable sur un calculateurs embarqué de plus ce calculateur contient une carte SD donc le compilateur spécifique qui je cherche comment je le trouve?
il se peut que gcc (compilateur de C ) mais je ne sais pas comment ?

4 réponses

mamiemando Messages postés 33346 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 novembre 2024 7 803
20 juil. 2015 à 19:23
Je n'ai pas tout compris car certaines phrases ne sont pas claires mais je pense que tu mélanges certaines choses.

Le compilateur dépend du langage : par exemple g90 pour du fortran, javac pour du java, gcc pour du c, g++ pour du c++. Pour certains langage il existe plusieurs compilateurs (par exemple clang est un compilateur c ou c++).

Ensuite se pose la question du choix de l'architecture (arm, i386, amd64, ...). Si cette architecture ne correspond pas à celle du système sur lequel est installé ton compilateur, on parle de compilation croisée. Certains langages reposent sur une machine virtuelle. C'est le cas de java et de c#. Dans le cas de java il n'y a donc pas de considération sur l'architecture cible : le binaire produit, appelé bytecode, est compatible avec toutes les machines virtuelles java (c'est d'ailleurs l'un des intérêts vantés par java).
http://www-igm.univ-mlv.fr/~dr/XPOSE2013/Comparaison_JVM_CLR/comparaison.html

Maintenant, pour répondre à te question, il faut déterminer dans quel langage tu veux programmer et quelle architecture est utilisée par ton calculateur. Ensuite il faut te renseigner sur comment compiler un programme pour cette architecture (s'il s'agit de compilation croisée) avec les logiciels disponibles sur ton système d'exploitation.

Reste aussi à voir si C# ou C sont les langages les plus appropriés. Il existe d'autres alternatives, par exemple python. C'est un langage multiplateforme, donc du moment que python est installé sur la machine cible (ainsi que les modules utilisés par ton programme), ça marche. Reste à voir si ce langage est envisageable pour tes besoins et si python installable sur ton calculateur...

Bonne chance
1
Bonjour
je développe mon code en langage c # et bien sure mon architecture cible ARM
je compris tour ce que entrains de dire mais concernant la compilation croisé comment je le faire en pratique . par contre il y'a deux ligne que je le trouve qui explique comment le faire en langage c et l'exécute sur mon calculateur

la première ligne est : arm_nome_gnueabi-gcc-c -03- I ~/htcsdk/include-o test.o test.c


la deuxième ligne est : arm_nome_gnueabi-gcc-o test test.o L~/htcsdk/lib-lhtc_apio

pour résume je développe mon code en c # puis je le compile avec Mono comment je le rendre exécutable sur mon calculateur avec en utilisons la notion compilation croisé
0
zaidoun > Zaidoun
24 juil. 2015 à 12:02
bonjour
j'ai une solution pour ce type de problème en effet le résultat de mono (compilateur de c#) serra dans un fichier .c puis je le compile avec gcc compilateur croise donc la, question ici
comment mettre un résultat de commende linux en un fichier . c,,,,,,,,?
merci de me réponse
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
Modifié par gravgun le 21/07/2015 à 19:19
'lut, (en reprenant ce que tu dis précédemment à mamiemando), il me semble que tu ne comprends pas bien comment une compilation croisée se fait. Effectivement c'est pour créer un exécutable pour une machine différente de celle qui compile, toute fois l'aspect "croisé" ne concerne pas du tout le langage utilisé! On ne compile pas du C# en C (ça s'appellerait alors transpilation, bien que dans l'absolu ce n'est pas impossible, il existe même le projet Vala qui prend un langage très similaire au C# et qui transpile en C avant de compiler avec GCC).
Tu dis ici que tu développes en C#, or tu veux compiler pour une cible ARM avec GCC, c'est donc en C ou C++ qu'il faut coder. Le C# ne donne pas de code natif donc la compilation croisée à proprement parler est impossible, vu que le C# donne du code .NET CLR, interprété par Mono, qui lui en revanche doit être cross-compilé.
Ceci dit pour que Mono marche sur le dit calculateur, il s'attend à un environnement dans lequel il peut travailler, à savoir un OS suivant les standards POSIX... ce qui n'est peut-être pas le cas du calculateur.

On manque donc de détails concernant ce que ton code C# utilise et fait, et ce que le calculateur que tu mentionnes utilises comme OS s'il en a un, et quel modèle c'est...
from human import idiocy
del idiocy
0
Salut
mon calculateur utilise un os puisque il comporte une carte SD ou je l'installe l'os vraiment je pense au transpilation comme une solution de langage c# en c puis le compilé par gcc avec de le deux ligne si dessus mais s'il y a avait un os dans ce calculateur est-ce que sera faisable ou si vous avez un autre démarche ne hésite pas de me guider
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228 > gravgun
21 juil. 2015 à 22:32
Ceci tu ne réponds pas à mes questions: quel est l'OS, quel est l'appareil? Et surtout, quelles fonctionnalités utilises-tu dans ton programme? Transpiler est possible, mais seulement pour des morceaux de code dont des alias sont dispo pour les compostants que tu utilises (par exemple ne songe même pas à utiliser tout ce qui commence par le namespace Microsoft, ni Windows.Forms)
0
mamiemando Messages postés 33346 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 novembre 2024 7 803
22 juil. 2015 à 09:54
Je ne sais pas pourquoi la discussion est partie de la transpilation ça ne me semble pas la bonne approche.

Le plus simple est, une fois le langage choisi, de chercher comment faire de la compilation croisée. Par exemple si on veut coder en C sous ubuntu x86 pour une cible ARM :
http://doc.ubuntu-fr.org/tutoriel/compilation_croisee

Pour C# je ne sais pas mais je prendrais quelques minutes à ta place en cherchant sur google "c# arm". Exemples :
https://stackoverflow.com/questions/5843333/c-sharp-compiler-that-can-generate-linux-arm-executables
https://stackoverflow.com/questions/476676/targeting-arm-architecture-with-net-compiler

Bonne chance
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
23 juil. 2015 à 10:19
Je suis parti dans la transpilation car il parle de C# et de GCC, or GCC ne fait pas dans les langages .NET, s'il tiens à s'en servir alors la transpilation est une solution... pas très valable en fait.
0
bonjour

j'ai une solution pour ce type de problème en effet le résultat de mono (compilateur de c#) serra dans un fichier .c puis je le compile avec gcc compilateur croise donc la, question ici

comment mettre un résultat de commende linux en un fichier . c,,,,,,,,?

merci de me réponse
0
mamiemando Messages postés 33346 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 novembre 2024 7 803
24 juil. 2015 à 19:23
"comment mettre un résultat de commande linux en un fichier . c"

Désolé mais ce n'est pas clair...
De quelle commande parles-tu ?
Que veux tu dire par mettre un résultat en fichier .c ?
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
25 juil. 2015 à 11:06
le résultat de mono (compilateur de c#) serra dans un fichier .c
Non. Mono est un runtime/ensemble de compilateurs, mais il est impossible de sortir du code C avec.
Ce n'est pas le bon outil. Comme j'ai dit, il existe Vala, mais il n'existe pas de transpileur C# -> C pour la bonne raison que c'est impossible complètement: certaines fonctionnalités du langages/des bibliothèques standard C# ne peuvent pas être répliquées en C, comme la Reflection. De plus, comme je l'ai dit, les libs utilisées n'ont pour la plupart pas de bindings en C.
Le mieux que tu puisses faire est traduire ton code C# en C à la main, puis compiler avec GCC, mais ce que tu veut accomplir est quasiment impossible.
0