system, popen et leurs problèmes :|

system, popen et leurs problèmes :| - C++ - Programmation

Marsh Posté le 31-07-2007 à 15:01:45    

Bon, pour une raison XYZ, j'ai besoin d'appeler g++ depuis un prog C++.
INFO : je suis sous g++ 4.1.2 sous ubuntu feisty :o

 

Ma première approche, débile et unsafe :o, était de faire :

 


int main()
{
  // J'ecris un truc qui compile dans un .cpp
  ofstream file("toto.cpp" );
  file << "#include <iostream>\n
               using namesapce std;\n
               int main()\n
               {\n
                  cout << \"Hello from runtime compiled prog\" << endl;\n
               }";
  file.close();

 

 system("g++ toto.cpp -o toto -O3 -Wall" );
  system("./toto" );
  return 0;
}

 

Rien de dantesque. Sauf que ... g++ me balance une erreur au link comme quoi y a pas de main dans mon programme :| Encore plus étrange, si je compile à la main toto.cpp depuis un terminal, ca marche :|
Même tarif avec popen()  ....

 

Donc question : y a t il une erreur grossière que j'ai pas vu :| ?
ou y a t il un meilleur moyen de faire ça ?

 

PS : creer un Makefile avant et faire system("make" ) ca ne march epas mieux :o


Message édité par Joel F le 31-07-2007 à 15:03:38
Reply

Marsh Posté le 31-07-2007 à 15:01:45   

Reply

Marsh Posté le 31-07-2007 à 15:14:58    

Aucun probleme ici apres avoir corrige namesapce en namespace et en utilisant la concatenation des litteraux de chaine plutot que d'en avoir un qui fait plusieurs lignes.

Reply

Marsh Posté le 31-07-2007 à 15:16:22    

t'as mal copié ou quoi ? namesapce, " manquantes, etc ?

Reply

Marsh Posté le 31-07-2007 à 15:17:17    

c'est bien le même g++ dans les deux cas ? même PATH et env ?

Reply

Marsh Posté le 31-07-2007 à 16:41:39    

EDIT : on oublie tout, j'ai trouvé. Une erreur de PATH entre la machine de dev et celle de prod.
Ca marche ! désolé pour le dérangement :o


Message édité par Joel F le 31-07-2007 à 16:54:53
Reply

Marsh Posté le 31-07-2007 à 23:13:51    

ok, bon sinon. Evidemment la compilation à la volée prends du temps. entre popen et system, c'ets quoi le mieux. system doit marcher en spawnant un sh non ? Y aurait il des astuces histoire d'effectuer cette compil le plus vite possible.

Reply

Marsh Posté le 01-08-2007 à 09:04:24    

je dirais kif kif et que c'est pas spawner un sh qui bouffe.

Reply

Marsh Posté le 01-08-2007 à 09:06:47    

Si j'ai bonne memoire, les deux lancent un shell...
 
Si la vitesse de compilation est importante, un niveau d'optimisation moindre (-O1 par exemple) peut etre utile.  Note que -O0 risque d'etre contre-productif de ce point de vue si les choses n'ont pas change.

Reply

Marsh Posté le 01-08-2007 à 09:09:07    

Pas bête le -O1, je vais voir ça.

Reply

Marsh Posté le 01-08-2007 à 10:36:57    

t'as qu'à vyrret <iostream> ;)

Reply

Marsh Posté le 01-08-2007 à 10:36:57   

Reply

Marsh Posté le 01-08-2007 à 13:58:27    

Taz a écrit :

t'as qu'à vyrret <iostream> ;)


Oui oui :o la c'était juste le "proof of concept". Le code vraiment généré/compilé à la volée à une autre gueule.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed