9
votes

GCC / G ++ me donne une erreur "CreateProcess: aucun fichier ou répertoire de ce type"

-edit- Il semble s'agir d'un problème de chemin et de ne pas pouvoir trouver son bac / dossier. Même si le G ++ est dans ce répertoire bin.

J'essaie de lancer G ++ sur Windows dans mon application, mais je reçois l'erreur ci-dessous. Comment je le répare? Remarque latérale, je peux faire g ++ dummy.cpp dans l'invite sans problème.

args -O file.exe -x C ++ -

stdout xxx

-edit- mon code est ... xxx


5 commentaires

Cela pourrait vous aider à poster le code que vous utilisez pour appeler GCC de votre candidature. Je suppose que vous devrez spécifier le chemin complet de l'exécutable GCC, car il n'y a probablement pas de «chemin de recherche» comme dans l'interpréteur de commande.


L'erreur vient-elle de votre appel? Pour autant que je sache comment le travail de GCC / G ++, ils commencent à créer un autre processus et ils peuvent être qu'ils ne peuvent pas trouver ceux-ci. Votre invite de commande est-elle une invite de commande où g ++ travaille l'invite de commande Windows ordinaire ou Cygwin's?


@Lothar: Fait. @Alexey: Dans CMD, g ++ fonctionne. Avec mon code C ++ (maintenant collé). Je l'exécute et obtenez l'erreur. L'erreur provient de g ++ stdout.


Selon votre code, l'erreur ne vient pas de GCC, mais à partir de votre code: Votre programme ne peut pas démarrer GCC. Avez-vous essayé d'utiliser des glaçons dans des chemins, comme ici: String gcc_bin = "E: \\ dev \\ externe \\ mingw \\ bin \\ g ++. EXE"; ?


@Alexey: Oui, aussi, il vient de GCC. Sinon, ma fonction retournerait des erreurs plutôt que de la trouver dans stdout. Par exemple, éditez le dossier et je vais obtenir une fenêtre MSG plutôt que sortant de stdout


10 Réponses :


3
votes

Quel GCC pour Windows utilisez-vous? Mingw, Cygwin, autre chose?

Avez-vous essayé de vous connecter à nouveau à nouveau comme indiqué dans cette question? CréerProcess: aucun fichier ou répertoire de ce type < P> Sous Windows, GCC a besoin de son annuaire Bin pour être sur le chemin, il ne regarde pas dans le répertoire de son propre binaire. Essayez de mettre quelque chose comme xxx

dans votre programme avant l'appel à g ++ pour vous assurer que le répertoire est sur le chemin du chemin de votre programme (si vous n'exécutez pas votre programme dans Un débogueur, utilisez WPRINTF à la place)

Voir si vous avez essayé d'installer GCC sur un chemin avec un personnage spatial dedans, Mingw et Cygwin avertissent contre cela.



0
votes

J'ai un problème hier avec un programme ne pouvant pas manipuler un chemin comme celui-ci: XXX PRE>

Je l'ai remplacé par: P>

<some stuff>;C:\Program Files\path\to\bins;<some other stuff>


0 commentaires

6
votes

Essayez d'ajouter le chemin d'accès au compilateur G ++ dans Chemin Code> Variable d'environnement:

TCHAR *path;
TCHAR *newpath;
DWORD dwSize = GetEnvironmentVariable(TEXT("PATH"), NULL, 0);

path = new TCHAR[dwSize];
GetEnvironmentVariable(TEXT("PATH"), path, dwSize);


dwSize += MAX_PATH;
newpath = new TCHAR[dwSize];
_tcscpy_s(newpath, dwSize, TEXT("E:\\dev\\external\\MinGW\\bin;"));
_tcscat_s(newpath, dwSize, path);
SetEnvironmentVariable(TEXT("PATH"), newpath);

delete[] path;
delete[] newpath;


0 commentaires

1
votes

Utilisez Sysinternals Processionniste (http://technet.microsoft.com/en-us/sysinternals/bb8966645) Pour retracer les appels système émis par votre code (Createefile, CreateProcess, Registry requis) ainsi que leur succès et leur retour valeur. Cela montre également toutes les tentatives différentes de trouver l'exécutable qui ne se trouve pas par votre code - la plupart des temps, cela le rend évident, quelle erreur (par exemple la faute de frappe, l'échappement, l'espace blanc dans le chemin de la trajectoire, etc.) a causé le code de ne pas trouver l'exécutable G ++ .


0 commentaires

1
votes

Utilisez Sysinternals Processionniste comme Bertnase dit. Ce que vous faites est de trouver le nom .exe qui fait la compilation dans la colonne Nom du processus, comme GCC.EXE. Ensuite, regardez dans la colonne de résultat et tout ce qui n'est pas un succès, vérifiez-le. Je pense que ce que vous cherchez est un nom non trouvé, cependant.

J'ai eu ce même problème et j'ai fait ce que je viens de mentionner ci-dessus, j'ai constaté que gcc.exe obtenait un nom non trouvé résultat de CC1OBJ.EXE. J'ai donc fait une supposition éduquée et je suis allé dans mon dossier Mingw sous \ libexec \ gcc \ mingw32 \ 4.5.0 (le numéro de version pourrait ne pas être identique à vous) et effectué une copie de CC1.exe, puis renommée que cc1obj.exe . Et Wala, qui corrige le problème.

Vous ne manquez probablement pas le même fichier, mais il semble que la suite de ce processus résoudra.


0 commentaires

0
votes

L'erreur que vous obtenez dire que la fonction de GCC "CreateProcess" tente d'accéder à un fichier et de ne pas le trouver.

évidemment si GCC attrape l'erreur, il fonctionne, alors rien de mal avec votre chemin.

Cependant, GCC ne trouve pas de programme ou une bibliothèque nécessaire à la compilation. C'est une erreur étrange que je connaisse sur Mingw32. Mon meilleur conseil sera de réinstaller MINGW32. Vous avez peut-être modifié une utilisation du fichier par le programme.


0 commentaires

4
votes

Il est très probable que les doubles instances du compilateur existent sur le système.

Si tel est le cas, essayez ce qui suit pour expérimenter de manière à ce que celui-ci dans le chemin actuel puisse exécuter pour la compilation source: P>

D:\cmn_dev\mingw64\bin>.\g++ HelloGcc.cpp -o Hello.exe


0 commentaires

2
votes

J'ai eu le même problème et j'ai été résolu après avoir ajouté le "C: \ mingw \ msys \ 1.0 \ bin" à la variable du système de chemin.


0 commentaires

0
votes

J'ai également confronté le problème lors de la mise en place d'atome. Mais plus tard, j'ai découvert que mon Mingw a été copié du dossier de codeblocks. Réinstallation des emballages via un programme d'installation officiel Mingw et ajoutez le chemin de répertoire (pour mon cas C: \ Mingw \ bin) dans

Paramètres du système avancé> Variables d'environnement> Chemin

a résolu le problème pour moi


0 commentaires

0
votes

Un vieux fil mais qui sait que cela peut aider.

Pour moi, j'ai remplacé le chemin complet avec l'emplacement du compilateur. P>

SO: P>

set path="< folder that contains the compiler>"


0 commentaires