pfiou, tout un programme...
je compile mon projet sous windows, linux, et basiquement tout système d'exploitation supportant la 3D (vaguement pour l'instant), incluant OpenSolaris, Solaris 10 et FreeBSD, et deux ou trois OS portables.
J'utilise 2 compilateurs pour l'instant, GCC et MSVC, et parfois j'essaye des trucs sur le compilateur Intel.
Les problèmes ont commencé a se poser lorsque je suis passé sous sunCC, j'ai corrigé pas mal d'erreurs de compilations mais je me suis retrouvé avec des erreurs de link bizarre. J'esplik:
Mon programme principal peut charger des plugins, lesquels dépendent du programme principal.
Sous windows par exemple, le programme principal a beaucoup d'exports, et avec "programme.exe" il y a "programme.lib" et donc "plugin.dll" peut être lié avec "programme.lib".
Au lancement, programme.exe charge plugin.dll a besoin de programme.exe qui est déjà chargé en mémoire, tous les bouts sont chargés, tout le monde est content
Sous linux, je compile l'executable avec un flag spécial (-rdynamic) qui permet de dire que le programme que je construit rend ses fonctions disponibles pour les chargements de DLL suivant (enfin de .so). Du coup, on compile le .so et on lui dit de ne pas résoudre ce qu'il ne connait pas. On a donc un .so incomplet qui ne vas pas marcher sauf si il trouve les symboles manquants quelque part lors du chargement.
Donc, au lancement de programme, on charge plugin.so qui trouve tous les symboles manuqnats dans programme : ca marche de nouveau
Sauf que sous sunCC, je n'ai pas réussi a trouver ce flag "-rdynamic", et du coup au chargement il me donne plein de "symbol not found" qui devraient être dans le programme.
Quelqu'un connait il l'equivalent de -rdynamic pour sunCC (et sous Solaris)? ou a une autre idée pour le système de plugin?
Partager