Hello
Je suis en train de me former au c++ (ça ne se fait pas sans maux de crâne...) depuis quelques mois maintenant après avoir fait pas mal de PHP (je vois d'ici ceux qui grincent des dents... ) qui a perdu de sa valeur à mes yeux depuis que j'ai commencer à goûter au C/C++ Il m'a fallut du temps pour chasser de mauvaises habitudes de conception incompatibles avec ce nouveau langage.
Pour ce faire j'ai décidé de faire un petit jeu simpliste, jouable en command line, ça à l'avantage de ne demander que des mécaniques de bases et d'attaquer les choses une par une.
Même si je suis encore (très ?) loin d'avoir un niveau convenable (manque de connaissance de la libc, du système, ...) j'ai déjà fait une version qui fonctionne.
Maintenant que je me sens à l'aise avec la base (syntaxe, compiler et surtout minimum de niveau de débogage) je m'attaque au linker. Et je me doute que ce n'est pas facile.
L'idée est de mettre en module les actions de mon petit jeu (via dlopen/dlsym/dlclose)
Je pense que je me heurte a un problème conceptuel, quelque chose qui m'échappe: j'ai bien pigé l'utilisation de "extern" du côté de la librairie pour exposer ses fonctions. En revanche je pense qu'il me manque quelque chose.
Je vais essayer de prendre un exemple con.
Application de base "core.hpp"
Code :
- class game_action {
- virtual bool isAllowed();
- virtual void execute();
- }
- class core {
- /* ... */
- }
|
Et une class de module "custom_module.hpp":
Code :
- #include "core.hpp"
- class module_custom_action_1 : public game_action {
- bool isAllowed();
- void execute();
- }
- class module_custom_action_2 : public game_action {
- bool isAllowed();
- void execute();
- }
|
core.cpp compile sans problème. de la même manière custom_module.cpp aussi. Mais lorsque je charge mon .so depuis l'application principale j'ai des problèmes de symbole game_action non définit, ce a quoi je m'attendais.
Je me dis aussi que compiler custom_module.cpp avec core.cpp n'est pas non plus la bonne solution.
Le module est dépendant de l'application principale, et l'application est indépendante du module
Peut-être que je ne suis pas du tout sur la bonne voie, je cherche à comprendre. J'ai trouvé plein de liens sur le chargement des librairies, mais aucun qui m'explique a quoi je fais face, à dire vrai je ne sais trop quoi chercher.
Donc plutôt que de me donner la réponse (A moins qu'elle soit vraiment évidente) si vous connaissez un bon tutorial ou article qui m'éclairerait à y voir plus clair... Ca ne sera pas le premier, ni le dernier !
Je sais qu'il y a du monde sur ce forum qui pourra m'aider !
Merci à ceux qui auront pris le temps de lire mon petit pavé
Message édité par the_bigboo le 23-03-2015 à 12:27:21