Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
probleme:liaison:mingw_vs [2016/11/18 12:02] – ↷ Liens modifiés en raison d'un déplacement. 69.30.213.82 | probleme:liaison:mingw_vs [2019/10/30 16:02] (Version actuelle) – mhtml -> html root |
---|
| |
=====unresolved external symbol _libintl_printf referenced in function …===== | =====unresolved external symbol _libintl_printf referenced in function …===== |
Dans ce cas, il s'agit d'une __erreur dans l'entête__ ''libintl.h'' et qui a été [[https://github.com/Alexpux/MINGW-packages/commit/b78ab10709fcda1c4220a4b2fbc7607293238656|corrigé depuis]] {{probleme:liaison:mingw_vs:gettext.htm.maff|Archive}}. Cette modification permet à Visual Studio de considérer la fonction ''libintl_printf'' comme étant celle native du système ''%%__printf__%%''. La question peut se poser pour savoir si cette situation était volontaire afin de forcer VS à utiliser une autre fonction que celle de base mais je ne suis pas parvenu à trouver un fichier ''.a'' qui contenait sa définition. | Dans ce cas, il s'agit d'une __erreur dans l'entête__ ''libintl.h'' et qui a été corrigé depuis [[https://github.com/Alexpux/MINGW-packages/commit/b78ab10709fcda1c4220a4b2fbc7607293238656|gettext_ make libintl.h compatible with Visual Studio. · Alexpux_MINGW-packages@b78ab10 · GitHub]] {{ :probleme:liaison:mingw_vs:gettext_make_libintl.h_compatible_with_visual_studio._msys2_mingw-packages_b78ab10_github_2019-10-30_15_54_16_.html |Archive du 15/06/2019 le 30/10/2019}}. Cette modification permet à Visual Studio de considérer la fonction ''libintl_printf'' comme étant celle native du système ''%%__printf__%%''. La question peut se poser pour savoir si cette situation était volontaire afin de forcer VS à utiliser une autre fonction que celle de base mais je ne suis pas parvenu à trouver un fichier ''.a'' qui contenait sa définition. |
| |
=====unresolved external symbol __imp___iob referenced in function …===== | =====unresolved external symbol __imp___iob referenced in function …===== |
Ensuite, il est nécessaire d'extraire tous les symboles de l'ensemble des fichiers ''.a''. Pour cela la commande ''nm'' devra être exécuté dans chaque dossier : ''nm -s %%--%%defined-only *.a > list.txt''. | Ensuite, il est nécessaire d'extraire tous les symboles de l'ensemble des fichiers ''.a''. Pour cela la commande ''nm'' devra être exécuté dans chaque dossier : ''nm -s %%--%%defined-only *.a > list.txt''. |
| |
Pour résoudre la dépendance %%__imp___iob%% il convient de trouver toutes les occurrences dans les symboles des fichiers ''.a''. Les solutions sont dans | Pour résoudre la dépendance ''%%__imp___iob%%'' il convient de trouver toutes les occurrences dans les symboles des fichiers ''.a''. Les solutions sont dans |
| |
* ''C:\msys64\mingw64\x86_64-w64-mingw32\lib\libcrtdll.a'' | * ''C:\msys64\mingw64\x86_64-w64-mingw32\lib\libcrtdll.a'' |
* ''%%___%%mingw_raise_matherr'' sera trouvé dans ''C:\msys64\mingw32\i686-w64-mingw32\lib\libmingw32.a'' mais un nouveau message d'erreur apparait : ''_atexit already defined in libmingw32.a(lib32_libmingw32_a-atonexit.o)'' dans le fichier ''MSVCRTD.lib(utility.obj)'' | * ''%%___%%mingw_raise_matherr'' sera trouvé dans ''C:\msys64\mingw32\i686-w64-mingw32\lib\libmingw32.a'' mais un nouveau message d'erreur apparait : ''_atexit already defined in libmingw32.a(lib32_libmingw32_a-atonexit.o)'' dans le fichier ''MSVCRTD.lib(utility.obj)'' |
| |
Pour résoudre ce dernier point, pas moyen de faire les choses proprement. Appliquer la méthode [[https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k%28LNK2005%29&rd=true|LNK2005]] {{probleme:liaison:mingw_vs:linker_tools_error_lnk2005.htm.maff|Archive}} en ajoutant au lieur l'option ''/FORCE:MULTIPLE''. C'est sale, il faut impérativement réaliser des tests pour s'assurer que le lieur n'a pas fait n'importe quoi mais félicitation, vous avez votre librairie. | Pour résoudre ce dernier point, pas moyen de faire les choses proprement. Appliquer la méthode [[https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k%28LNK2005%29&rd=true|Linker Tools Error LNK2005]] {{ :probleme:liaison:mingw_vs:linker_tools_error_lnk2005_microsoft_docs_2019-10-30_15_55_25_.html |Archive le 11/04/2016 le 30/10/2019}} en ajoutant au lieur l'option ''/FORCE:MULTIPLE''. C'est sale, il faut impérativement réaliser des tests pour s'assurer que le lieur n'a pas fait n'importe quoi mais félicitation, vous avez votre librairie. |
| |
| =====Lier des dlls MinGW avec Visual Studio===== |
| Cela ne peut être fait directement car la façon dont le lieur de gcc et de Microsoft converti le nom de fonction en symbole est différent ([[lang:cpp:lieur|mangling]]). Deux articles couvrent bien le sujet. |
| |
| [[https://outofhanwell.wordpress.com/2006/05/01/linking-msvc-libraries-with-mingw-projects/|Linking MSVC Libraries with MinGW Projects _ Out of Hanwell]] {{ :probleme:liaison:mingw_vs:linking_msvc_libraries_with_mingw_projects_out_of_hanwell_2019-10-30_15_55_33_.html |Archive du 01/05/2006 le 30/10/2019}} |
| |
| [[http://www.mingw.org/wiki/msvc_and_mingw_dlls|MSVC and MinGW DLLs _ MinGW]] {{ :probleme:liaison:mingw_vs:msvc_and_mingw_dlls_mingw_2019-10-30_15_55_39_.html |Archive du 26/02/2009 le 30/10/2019}} |