{"id":3,"date":"2009-02-05T14:13:43","date_gmt":"2009-02-05T13:13:43","guid":{"rendered":"http:\/\/ree7.fr\/blog\/?p=3"},"modified":"2015-09-17T11:12:10","modified_gmt":"2015-09-17T10:12:10","slug":"tech-attention-au-compilateur-c-de-visual-studio-2008","status":"publish","type":"post","link":"http:\/\/www.ree7.fr\/blog\/2009\/02\/tech-attention-au-compilateur-c-de-visual-studio-2008\/","title":{"rendered":"Attention au compilateur C-+ de Visual Studio 2008"},"content":{"rendered":"<p style=\"text-align: center;\"><img loading=\"lazy\" class=\"aligncenter\" src=\"http:\/\/img530.imageshack.us\/img530\/7097\/16743275ql9.png\" alt=\"\" width=\"749\" height=\"521\" \/><\/p>\n<p>Je ne suis pas un grand expert C\/C++ mais j&rsquo;ai eu affaire \u00e0 une chose \u00e9trange aujourd&rsquo;hui, qui m&rsquo;aura cout\u00e9 (et \u00e0 d&rsquo;autres) de longues heures.<\/p>\n<p>Erreur de l&rsquo;\u00e9diteur de lien : <strong>error LNK2019: unresolved external symbol \u00ab\u00a0short __cdecl ga_population_seed(struct population_t *)\u00a0\u00bb<\/strong><\/p>\n<p>Le contexte, une solution C\/C++ principalement \u00e9crite en C, dont deux des projets sont une librairies (sortie en .lib) C (GAUL : Genetic Algorithm Utility Library pour ne pas la citer).<\/p>\n<p>La compilation se passe sans heurts (ceci dit, nous avons du modifier un petit peu la version soit disant Windows de GAUL pour qu&rsquo;elle fonctionne sous VS2008 &#8211; <em>soucis de #define, etc&#8230; assez triviaux dans l&rsquo;ensemble<\/em>). Mais le linking est une catastrophe, impossible pour VS de trouver les fonctions d\u00e9finies dans le header de notre librairie. Diantre !<\/p>\n<p>Et bien le souci vient de la configuration du projet par d\u00e9faut sous Visual Studio. En effet celui ci nous propose de choisir entre un compilateur C, et un compilateur C++, mais son choix par d\u00e9faut semble \u00eatre un \u00e9trange et indigeste mix des deux !<\/p>\n<p><strong>Tentative d&rsquo;explication :<\/strong><\/p>\n<p>&#8211; Le compilateur par d\u00e9faut (qui accepte de compiler sans broncher) doit d\u00e9clarer nos fonctions (dans les .obj) d&rsquo;une maniere differente de celle attendue par le linker ( __cdecl blah-blah-blah)<\/p>\n<p><strong>La solution :<\/strong><\/p>\n<p>&#8211; Forcer le compilateur a utiliser le compilateur C++ (ou C suivant votre convenance)<\/p>\n<p>&#8211; Corriger les erreurs lev\u00e9es par le compilateur (et ca peut etre long, dans notre cas GAUL utilise moult attributions de pointeurs sans cast, d\u00e9clare des fonctions s&rsquo;appelant new ou delete, &#8230; &#8211; environ 300 erreurs au total chez nous).<\/p>\n<p>Et voila, \u00e7a devrait linker correctement maintenant !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Je ne suis pas un grand expert C\/C++ mais j&rsquo;ai eu affaire \u00e0 une chose \u00e9trange aujourd&rsquo;hui, qui m&rsquo;aura cout\u00e9 (et \u00e0 d&rsquo;autres) de longues heures. Erreur de l&rsquo;\u00e9diteur de lien : error LNK2019: unresolved external symbol \u00ab\u00a0short __cdecl ga_population_seed(struct population_t *)\u00a0\u00bb Le contexte, une solution C\/C++ principalement \u00e9crite en C, dont deux des projets [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[7],"tags":[3,5,6,4],"jetpack_publicize_connections":[],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p19lzH-3","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/www.ree7.fr\/blog\/wp-json\/wp\/v2\/posts\/3"}],"collection":[{"href":"http:\/\/www.ree7.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.ree7.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.ree7.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.ree7.fr\/blog\/wp-json\/wp\/v2\/comments?post=3"}],"version-history":[{"count":0,"href":"http:\/\/www.ree7.fr\/blog\/wp-json\/wp\/v2\/posts\/3\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.ree7.fr\/blog\/wp-json\/wp\/v2\/media?parent=3"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.ree7.fr\/blog\/wp-json\/wp\/v2\/categories?post=3"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.ree7.fr\/blog\/wp-json\/wp\/v2\/tags?post=3"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}