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?
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
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
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