LNK2001: Mes bibliothèques d’amplification sont (probablement) mal construites

J’ai décidé de mettre à jour mes bibliothèques boost de 1,61 à 1,63 et, dans le projet que j’ai mis à jour pour utiliser les nouveaux fichiers, je reçois de nouveaux messages d’erreur que je ne recevais pas auparavant:

error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAAEBVerror_category@12@XZ) error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (?generic_category@system@boost@@YAAEBVerror_category@12@XZ) 

Depuis que mes bibliothèques 1.63 sont compilées à l’aide de Visual Studio 2017, ma première hypothèse est que j’ai commis une erreur en compilant les bibliothèques boost. Voici donc le total des étapes que je suis en train de passer à partir d’une décompression propre des fichiers boost:

  1. Menu Démarrer → Visual Studio 2017 RC → Invite de commande du développeur
  2. Je change de répertoire jusqu’à ce que je sois dans le dossier boost_1_63_0 haut niveau.
  3. Je lance bootstrap.bat
  4. J’ouvre project-config.jam pour l’édition
  5. Je change en using msvc ; à l’ using msvc : 14.1 : E:\Program Files\Microsoft Visual Studio\VC\Tools\MSVC\14.10.24911\bin\HostX64\x64\;
  6. J’ouvre boost/config/auto_link.hpp pour l’édition
  7. Je modifie ce fichier (code ci-dessous après la liste)
  8. Dans l’invite de commande ouverte, j’exécute la commande b2 architecture=x86 address-model=64 link=static threading=multi runtime-link=shared --build-type=complete stage --stagedir=stage/x64 -a
  9. Il se termine par le message suivant à la fin (énuméré ci-dessous après la liste)
  10. J’essaie d’utiliser ces bibliothèques avec mon code, en utilisant #define BOOST_LIB_DIAGNOSTIC pour #define BOOST_LIB_DIAGNOSTIC que les fichiers corrects sont utilisés (ils le sont).
  11. J’essaie de comstackr mon projet utilisant boost.asio et d’obtenir les deux erreurs de symbole externe non résolues répertoriées ci-dessus.

Est-ce que quelqu’un sait où est mon erreur? Ces erreurs ne se produisent pas si j’utilise les bibliothèques boost 1.61 compilées à l’aide de Visual Studio 2015 dans Visual Studio 2017 RC.

auto_link.hpp (ancien):

 # elif defined (BOOST_MSVC) // vc14: # define BOOST_LIB_TOOLSET "vc140" 

auto_link.hpp (nouveau):

 # elif defined (BOOST_MSVC) && (BOOST_MSVC < 1910) // vc14: # define BOOST_LIB_TOOLSET "vc140" # elif defined (BOOST_MSVC) // vc15: # define BOOST_LIB_TOOLSET "vc141" 

Message à la fin du processus de compilation boost:

 ...failed updating 6 targets... ...skipped 4 targets... ...updated 904 targets... 

Bibliothèques affichées à l’aide de #define BOOST_LIB_DIAGNOSTIC :

 1>Linking to lib file: libboost_system-vc141-mt-1_63.lib 1>Linking to lib file: libboost_date_time-vc141-mt-1_63.lib 1>Linking to lib file: libboost_regex-vc141-mt-1_63.lib 

Faites-moi savoir si d’autres informations de diagnostic sont nécessaires. J’ai essayé de commenter diverses utilisations de la bibliothèque boost.asio, mais seule la suppression de l’en-tête a totalement éliminé ces problèmes (ce qui a bien sûr rendu les composants boost inutilisables).

Cela semble être similaire à l’ erreur LNK 2019 en utilisant Boost :: asio car vous avez les mêmes erreurs.

Je viens d’installer VS2017RC et de boost 1.63. Ensuite, j’ai utilisé cette description: Build boost avec msvc 14.1 (VS2017 RC) . Note: votre ligne

 using msvc : 14.1 : E:\Program Files\Microsoft Visual Studio\VC\Tools\MSVC\14.10.24911\bin\HostX64\x64\; 

devrait probablement inclure le “cl.exe” et les guillemets.

 using msvc : 14.1 : "E:\Program Files\Microsoft Visual Studio\VC\Tools\MSVC\14.10.24911\bin\HostX64\x64\cl.exe"; 

… Ils devraient mettre en place une barre de progression ou autre;) Devinez quoi:

 ...failed updating 6 targets... ...skipped 4 targets... ...updated 1214 targets... 

Alors regardez le message d’erreur:

 msvc.comstack.asm bin.v2\libs\context\build\msvc-14.1\debug\address-model-64\link-static\threading-multi\asm\make_x86_64_ms_pe_masm.obj 'ml64' is not recognized as an internal or external command, operable program or batch file. ml64 -nologo -c -Zp4 -Cp -Cx -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTEXT_EXPORT= -DBOOST_CONTEXT_SOURCE -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTEXT_EXPORT= -DBOOST_CONTEXT_SOURCE /Zi /Zd /W3 -Fo "bin.v2\libs\context\build\msvc-14.1\debug\address-model-64\link-static\threading-multi\asm\make_x86_64_ms_pe_masm.obj" "libs\context\src\asm\make_x86_64_ms_pe_masm.asm" ...failed msvc.comstack.asm bin.v2\libs\context\build\msvc-14.1\debug\address-model-64\link-static\threading-multi\asm\make_x86_64_ms_pe_masm.obj... 

Dépendances 64 bits manquantes … Ainsi, comme le dit KindDragon dans le deuxième lien:

Exécutez “Invite de commande du développeur pour VS 2017 RC” à partir du menu Démarrer de Windows pour renforcer à partir d’un shell configuré à l’aide des vcvars x86 ou x64 .

Il est nécessaire de configurer le shell à l’aide des variables du compilateur 64 bits.

 cd "\Program Files (x86)\Microsoft Visual Studio 14.0\VC" vcvarsall amd64 

Vous pouvez également démarrer l’environnement natif x64 à partir du menu Démarrer: -> Visual Studio 201x -> Visual Studio Tools -> Windows Desktop Command Prompts -> VS201x x64 Native Tools Command Prompt

Et puis reconstruire à nouveau.

 ...failed updating 2 targets... ...skipped 2 targets... ...updated 6 targets... 

Avec l’erreur fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64' message fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64' . Donc, une reconstruction est nécessaire.

 b2 --clean-all etc... 

…Tu obtiens le point. Mais il semble que j’ai lu dans les commentaires que Bogdan a également mentionné cela. Eh bien, Kinddragon dans Build Boost avec msvc 14.1 (VS2017 RC) était en fait le premier;)