web-dev-qa-db-fra.com

Comment créer un lien vers des bibliothèques de boost dynamiques?

J'ai compilé boost lib et les ai obtenus.

//Shared/dynamic link libraries

24/03/2010  11:25 PM            53,248 boost_thread-vc80-mt-1_42.dll
24/03/2010  11:25 PM            17,054 boost_thread-vc80-mt-1_42.lib
24/03/2010  11:25 PM            17,054 boost_thread-vc80-mt.lib

24/03/2010  11:25 PM            73,728 boost_thread-vc80-mt-Gd-1_42.dll
24/03/2010  11:25 PM            17,214 boost_thread-vc80-mt-Gd-1_42.lib
24/03/2010  11:25 PM            17,214 boost_thread-vc80-mt-Gd.lib

// Static libs... does not need any dlls

24/03/2010  11:25 PM           381,716 libboost_thread-vc80-mt-1_42.lib
24/03/2010  11:25 PM           381,716 libboost_thread-vc80-mt.lib

24/03/2010  11:25 PM           999,552 libboost_thread-vc80-mt-Gd-1_42.lib
24/03/2010  11:25 PM           999,552 libboost_thread-vc80-mt-Gd.lib

24/03/2010  11:25 PM           421,050 libboost_thread-vc80-mt-s-1_42.lib
24/03/2010  11:25 PM           421,050 libboost_thread-vc80-mt-s.lib

24/03/2010  11:25 PM         1,015,688 libboost_thread-vc80-mt-sgd-1_42.lib
24/03/2010  11:25 PM         1,015,688 libboost_thread-vc80-mt-sgd.lib

Dans Visual Studio, j'ai écrit une application de test à l'aide de la bibliothèque de threads boost. Sur la base des paramètres de génération de code, il demande uniquement ces quatre bibliothèques (comme le débogage multithreading, le multithreading, la dll de débogage multithreading et la dll multithreading)

24/03/2010  11:25 PM           381,716 libboost_thread-vc80-mt-1_42.lib
24/03/2010  11:25 PM           381,716 libboost_thread-vc80-mt.lib

24/03/2010  11:25 PM           999,552 libboost_thread-vc80-mt-Gd-1_42.lib
24/03/2010  11:25 PM           999,552 libboost_thread-vc80-mt-Gd.lib

24/03/2010  11:25 PM           421,050 libboost_thread-vc80-mt-s-1_42.lib
24/03/2010  11:25 PM           421,050 libboost_thread-vc80-mt-s.lib

24/03/2010  11:25 PM         1,015,688 libboost_thread-vc80-mt-sgd-1_42.lib
24/03/2010  11:25 PM         1,015,688 libboost_thread-vc80-mt-sgd.lib

Maintenant, ma question est de savoir comment lier mon application aux 2 autres bibliothèques pour qu'elle utilise les DLL?

24/03/2010  11:25 PM            53,248 boost_thread-vc80-mt-1_42.dll
24/03/2010  11:25 PM            17,054 boost_thread-vc80-mt-1_42.lib
24/03/2010  11:25 PM            17,054 boost_thread-vc80-mt.lib

24/03/2010  11:25 PM            73,728 boost_thread-vc80-mt-Gd-1_42.dll
24/03/2010  11:25 PM            17,214 boost_thread-vc80-mt-Gd-1_42.lib
24/03/2010  11:25 PM            17,214 boost_thread-vc80-mt-Gd.lib

Question 2. Que signifie le g, s?

30
testingmysql

Vous pouvez forcer Boost à utiliser les DLL en définissant BOOST_ALL_DYN_LINK - soit dans les paramètres de votre préprocesseur C++, soit par un #define dans votre stdafx.h en-tête précompilé, par exemple:

#define BOOST_ALL_DYN_LINK

33
Rob

Pour configurer le boost, utilisez l'en-tête de configuration utilisateur

<boost/config/user.hpp>

Recherchez ensuite les lignes de liaison dynamiques et passez à la configuration souhaitée

// BOOST_ALL_DYN_LINK: Forces all libraries that have separate source, 
// to be linked as DLL's rather than static libraries on Microsoft Windows 
// (this macro is used to turn on __declspec(dllimport) modifiers, so that 
// the compiler knows which symbols to look for in a DLL rather than in a 
// static library).  Note that there may be some libraries that can only 
// be statically linked (Boost.Test for example) and others which may only 
// be dynamically linked (Boost.Threads for example), in these cases this 
// macro has no effect.
// #define BOOST_ALL_DYN_LINK
20
JProgrammer
  1. Les fichiers .lib sont liés statiquement, tandis que les fichiers .dll sont liés dynamiquement. Je crois que c'est un paramètre de projet VC.

 Le préfixe "lib" est pour les bibliothèques statiques. Utilisez link = static 
 La lettre 's' fait référence à un lien statique vers le runtime. Utilisez runtime-link = static 
 Le "d" est debug, utilisez variant = debug 
 Le "g" utilise debug runtime, je pense qu'il est inclus dans la variante "debug" 
 déjà. Sinon, runtime-debugging = on vous aidera. 

Source: http://old.nabble.com/Build-stately-linked-boost-libs- * - vc90-mt-sgd.lib-td16301103.html

12
Artem Sokolov