system, popen et leurs problèmes :| - C++ - Programmation
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.
Marsh Posté le 31-07-2007 à 15:16:22
ReplyMarsh Posté le 31-07-2007 à 15:17:17
c'est bien le même g++ dans les deux cas ? même PATH et env ?
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
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.
Marsh Posté le 01-08-2007 à 09:04:24
je dirais kif kif et que c'est pas spawner un sh qui bouffe.
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.
Marsh Posté le 01-08-2007 à 13:58:27
Taz a écrit : t'as qu'à vyrret <iostream> |
Oui oui la c'était juste le "proof of concept". Le code vraiment généré/compilé à la volée à une autre gueule.
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
Ma première approche, débile et unsafe , é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
Message édité par Joel F le 31-07-2007 à 15:03:38