2.2.3 La fonction qui compile le plugin

Voilà la fonction qui compilera le plugin :

1
2
3
4
5
6
7
8
9
10
11
12
bool compilePlugin(const std::string & pluginFileName, const std::string & pluginSoName){
	if(pluginFileName == "" || pluginSoName == "") return false;
	//on créer la commande pour compiler le plugin
	string cmd("gcc -fPIC -shared -O3 " + pluginFileName + " -lm -o " + pluginSoName);
	//on exécute cette commande
	if(system(cmd.c_str()) != 0){
		cerr << "compilePlugin : le plugin n'a pas pu être compilé." << endl;
		return false;
	}else{
		return true;
	}
}

Pourquoi y a-t-il une option -fPIC dans la commande pour compiler le plugin ?

Parce que sinon, GCC va vous faire une belle erreur :

./generatednumberlibdynamic 
f(x) drawer
Expression de la fonction f(x) : x*sin(x)
/usr/bin/ld: /tmp/ccznmAr0.o: réadressage R_X86_64_PC32 vers le symbole non défini « sin@@GLIBC_2.2.5 » ne peut pas être utilisé en créant un objet partagé ; recompilé avec -fPIC
/usr/bin/ld: édition de lien finale en échec: Mauvaise valeur
collect2: error: ld returned 1 exit status
compilePlugin : le plugin n'a pas pu être compilé.
makePlugin : impossible de compiler le plugin.
generatednumberlibdynamic : Impossible de créer le plugin.

En fait c'est de la faute de la fonction sin qui n'est pas dans votre plugin mais dans libm la fonction est donc partagée, et on active ce partage avec l'option -fPIC