2010-07-28 4 views
0

Je dois compiler et exécuter un programme C++ à partir de Java. J'utiliseExécution de C++ à partir d'un problème Java

Processus a = Runtime.getRuntime(). Exec ("g ++ -g fonction.cpp -o fonction"); Processus b = Runtime.getRuntime(). Exec ("./fonction"); Le problème est que la sortie que je reçois du programme C++ n'est pas correcte mais si je la compile et l'exécute moi-même dans la ligne de commande cela fonctionne très bien. Le problème est Java et je ne sais pas pourquoi.

Merci beaucoup

Al,

+3

"La sortie n'est pas correcte" signifie quoi exactement? – f1sh

Répondre

2

Il y a un problème défini et un problème probable que je vois ici. Le problème est que Runtime.exec() ne pas attendre le processus pour terminer. Donc, vous devrez ajouter

a.waitFor(); 

avant d'appeler b.

Le problème possible est que, selon la façon dont vous appelez cette application, le répertoire de travail actuel peut ne pas être là où vous le pensez. Donc, function.cpp peut ne pas exister.

+0

J'ai travaillé !!!! Merci mec!!! – Altober

1

que vous attendez processus A à terminer avant que le processus en cours d'exécution B?

+0

non je ne sais pas, je vais essayer merci. – Altober

+0

Merci c'était – Altober

+0

Si une réponse a résolu votre problème, s'il vous plaît "accepter" le meilleur en cochant la case à gauche. –

0

"La sortie ... n'est pas correcte" n'aide personne à diagnostiquer votre problème. Vous devriez certainement donner la sortie que vous attendiez, et la sortie que vous avez vu de Java. En supposant que votre programme est petit, vous devriez aussi publier le code source (puisqu'il s'agit du processus de compilation après tout). Par ailleurs, que se passe-t-il lorsque vous naviguez dans la direction de travail du programme Java, trouvez l'exécutable function qu'il génère et invoquez-le vous-même depuis la ligne de commande? La sortie est-elle correcte maintenant? La réponse à cette question vous permettra de savoir si le problème est dans l'étape de compilation ou d'exécution.

Si c'est l'exécution, je devrais hasarder une estimation à des choses comme l'environnement (envvars, PATH, etc.) mais sans plus d'informations c'est difficile à dire.

En outre, comme pour toutes les questions qui impliquent Process es, jetez un oeil à these common pitfalls. Il semble que vous en fassiez au moins une (la plus courante de ne pas consommer de sortie), ce qui pourrait amener votre programme à travailler sur un code C++ trivial mais à faire une impasse sur une plus grande base de code.

Vous ne vérifiez pas non plus la sortie (la valeur de retour ou les flux stdout/stderr) de l'étape de compilation, donc vous n'avez aucune idée de la réussite de la compilation - et sinon, de quoi (utile) messages d'erreur que vous avez reçu du compilateur.

+0

merci pour votre temps. Maintenant ça marche. – Altober

Questions connexes