Difficulté à compiler Msys2

a marqué ce sujet comme résolu.

Bonjour,

Je suis le cours sur le langage C, mais j’ai des difficultés à faire comprendre la destination de mon fichier au terminal, il est aussi têtu qu’une pierre. Edit: Je suis arriver à me guider dans le terminal jusqu’ a mon fichier ( avec la commande cd C:/Users/Moi/Documents/Clearn) et réussi à compiler , lorsque je lance le fichier .a j’ai une fenêtre d’erreur , voir capture d’écran.

J’ai déjà réinstaller le programme et redémarrer le pc. Pourriez vous me guider ? merci d’avance :D

+0 -0

Tu veux exécuter un .a ?
Tu sais que ce n’est pas fait pour ça ?

Je pense qu’on manque de contexte.

Tu souhaite compiler Msys2 ? 🤔

+1 -0

Disons que ce que je comprends c’est que le fichier .a est le résultat de la compilation du main.c créer sur notepad++. Le type du fichier dans l’explorateur Windows est Application donc un .exe .

D’accord dans le main.c, il y a juste :


int main(void)
{
  return 0;  
}

C’est juste que par défaut l’exécutable s’appelle a.exe, mais l’explorateur Windows se croit plus malin que ses utilisateurs et masque les extensions.

Bref, ton problème ressemble à une erreur de link, tu vois quoi si tu fais ldd a.exe?

$ ldd a.exe
        ntdll.dll => /c/Windows/SYSTEM32/ntdll.dll (0x7ffafd030000)
        KERNEL32.DLL => /c/Windows/System32/KERNEL32.DLL (0x7ffafb820000)
        KERNELBASE.dll => /c/Windows/System32/KERNELBASE.dll (0x7ffafadc0000)
        msys-2.0.dll => /usr/bin/msys-2.0.dll (0x180040000)

Cela :)

mais je pensais qu’un fichier .exe universel et donc ouvrable par le système Windows

Ce serait beau, mais en pratique c’est rarement le cas. Là en l’occurrence ton exe va chercher /usr/bin/msys-2.0.dll au runtime, mais lorsque tu es en dehors de msys ce fichier est introuvable (alors que les autres le sont). Pour faire un exécutable un peu plus portable, tu as plusieurs options :

  • te lier statiquement sur msys-2.0 pour l’inclure dans ton binaire (je sais pas comment msys est foutu, c’est peut être pas faisable/souhaitable) ;
  • te lier sur msys-2.0.dll avec un chemin relatif et le distribuer avec le binaire pour que ton binaire puisse le trouver ;
  • ne pas utiliser msys ou cygwin ou similaire qui sont des couches par dessus Windows faisant semblant de ressembler à Linux, mais compiler de manière un peu plus native pour Windows en utilisant un compilo directement installé sur Windows (comme mingw).
+1 -0

Je pense qu’une question pertinente est surtout de savoir quel est ton but en apprenant le C. Tu pourrais avoir intérêt à utiliser un autre langage selon ce que tu souhaites faire. En dehors du monde de la programmation système où il a un intérêt parce qu’historiquement omniprésent et du monde de l’embarqué parce que son support est très large, C n’est quasiment jamais un bon choix.

En fait j’envisage a terme de vouloir créer un jeux vidéo sur mobile, j’ai fais un post ici pour en parler , j’avais commencer le C sur le SiteduZero( openclasseroom) je m’étais arrêter aux pointeurs, apparemment la version du cours proposé ici est plus à jour, et l’on m’a conseiller d’apprendre le c pour comprendre comme ce que je fais marche. D’autant que je suis pas du tout dans le domaine qui touche à l’informatique , c’est juste car ce me plaît.

https://zestedesavoir.com/forums/sujet/15670/jaimerais-creer-un-jeux-pour-mobile-en-partant-de-zero/?page=1#p237314

Heu… Sur le sujet que tu as pointé, tout le monde te dit d’utiliser autre chose que C. C’est un langage qui offre très peu d’abstraction et t’oblige a faire gaffe à tout un tas de choses (du genre la gestion manuelle des ressources) alors que ce sont des problèmes largement réglés.

on m’a conseiller d’apprendre le c pour comprendre comme ce que je fais marche

Apprendre le C t’apprend comment le C marche, ça t’apprend à peu près rien d’autre d’utile. Surtout qu’on parle là de développer un jeu vidéo pour mobile, ce qui implique des considérations beaucoup à beaucoup plus haut niveau d’abstraction que ce que C manipule. Comme ce qui t’a été conseillé, utiliser un moteur comme Godot avec un des langages haut niveau supporté (comme C#) serait beaucoup plus pratique.

Si ton objectif final est de créer des jeux mobiles, je te déconseille d’apprendre le C en premier langage. Mieux vaut partir sur un langage qui pourra te servir directement pour développer des jeux mobiles, ce que le C ne permet pas facilement. Le sujet que tu lies te donne très clairement le même conseil, et te renvoie vers d’autres langages plus adaptés au développement mobile.

Quoi qu’il en soit, tu auras en fait (au moins) trois éléments distincts dans ton apprentissage :

  • apprendre à programmer tout court : n’importe quel langage fait l’affaire, mais mieux vaut en choisir un adapté à ton objectif, ça te fera gagner du temps (donc pas du tout le C, sauf si tu aimes souffrir pour rien) ;
  • apprendre à programmer des jeux : c’est une spécialité à part entière, tu peux faire tes premiers jeux sur ordinateur, ça sera déjà très formateur (avec un moteur de jeu, ou pas, si tu veux y aller à la dure) ;
  • apprendre à programmer sur mobile : si tu sais déjà programmer, et programmer des jeux, tu auras encore à découvrir les spécificités du dév mobile, qui n’est pas un monde entièrement à part, mais a quelques spécificités.

Bon courage dans tes projets. ^^

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte