Bonjour,
Merci de prendre le temps de lire ce topic. En premier lieu, je n'ai pas honte de dire que je suis un très débutant en C++, et Visual C++. Je m'y suis mis par la force des choses, pour le projet qui nécéssite votre aide. Je précise également que j'ai déjà écumé les tréfonds du web, ai trouvé quelques topics par ci par là, et ici même, mais qu'aucun n'a su résoudre ce mystère et m'amener a un build sans erreurs.
Je suis en charge (comprendre, mon entreprise me charge de.) trouver une solution pour un daemon irc interne. J'ai opté pour inspircd qui semble convenir terriblement à mes besoins. J'ai cependant besoin de rebuilder le daemon car j'aimerai y ajouter des modules supplémentaires non compilés par défaut.
Je télécharge donc l'archive des sources du daemon et me lance dans l'aventure. J'ouvre le .sln dispo dans /win et me voila fin prêt. Je lance une premier compilation a froid sans rien toucher, et ca build sans erreurs.
La doc de inspircd dit un truc genre "les modules placés dans le dossier extra sont ceux qui nécéssitent des librairies externes c'est pourquoi ils ne sont pas compilés par défaut" (et accessoirement "démerdez vous").
Donc, je fouille un peu le wiki et je trouve une procédure. Je rentre dans /src/modules/extra, et je copie le .cpp qui m'interesse (m_mysql) pour le placer dans /src/modules tout court. Dans mon projet cpp, je regarde mon fichier m_mysql.cpp, et je change son relative path pour le tout neuf (car le répertoire extra est exclu de la compilation).
Je teste la compilation, comme ca pour voir. Comme plus ou moins prévu, j'ai une tétrachiée d'erreurs qui disent en gros "mysql_[fonction]" not found. Prévisible, donc.
Viens le moment d'inclure la lib mysql nécéssaire. Je me rends dans mon dossier MySQL Server (fraichement installé et opérationnel) et j'y trouve les /include et /lib qui me semblent nécéssaires. A l'aveugle, j'ouvre les propriétés de projet, je me rends dans VC++ Directories et place les dossiers correspondants dans Include Path et Library Path.
Là je me dis, c'est cool, c'est simple, ca va marcher. Que néni ! A la compilation j'ai un tas d'erreurs parlant de conflits de librairies dont voici un petit sample :
Le panneau de warning me suggère d'ignorer les librairies par défaut, parce qu'il semble que des fonctions soient définies 2 fois dans 2 librairies différentes et que ca foutrait la merde.error LNK2005: __encoded_null déjà défini(e) dans MSVCRT.lib(MSVCR100.dll) D:\sandbox\ircd\win\LIBCMT.lib(tidtable.obj) inspircd
Bien chef, je vais dans les propriétés du projet, Linker, Input, et je mets le "Ignore All Default Libraries" a "yes".
On est reparti pour la compilation.
Et la effectivement il me trouve plus mes fonctions en double. Par contre, il m'en manque une autre partie qui semble etre utilisée ailleurs dans le code, donc j'en aurai également besoin. Petit sample d'erreur au passage :
Ma question est donc : comment je fais pour avoir a la fois la librairie MSVCRT.lib qui semble indispensable a ma compilation, et la librairie mysql qui est également indispensable a la compilation avec mon module, sachant que les 2 ont certaines fonctions en commun ?Error 58 error LNK2001: symbole externe non résolu _memset D:\sandbox\ircd\win\channels.obj inspircd
Partager