IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Boost C++ Discussion :

Problème de link des librairies de Boost


Sujet :

Boost C++

  1. #1
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut Problème de link des librairies de Boost
    Bonjour,

    Depuis 2 semaines je commence à travailler avec Boost sous VisualC++ 9 express.

    Actuellement j'ai utilisé des librairies de boost utilisable uniquement avec les .h

    Mais maintenant j'aimerai intégrer certaines librairie qui doivent être compilées.
    J'ai déjà compilé toutes les librairies (static et dynamique). Elles sont donc mon répertoire C:\_dev\lib

    Par contre je n'arrive pas à linker les librairies. J'ai essayé avec plusieurs (Program options, FileSystem) et c'est toujours pareil.

    Dans les options de mon projet, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Linker / General / Additionnal Library Directories : C:\_dev\lib
    Linker / Input / Additionnal Dependencies : boost_program_options-vc90-mt-p-1_38.lib
    Et même en mettant ces options j'ai
    1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
    1>check_01.obj : error LNK2019: unresolved external symbol "public: __thiscall boost::program_options::options_description::options_description(class stlpd_std::basic_string<char,class stlpd_std::char_traits<char>,class stlpd_std::allocator<char> > const &,unsigned int)" (??0options_description@program_options@boost@@QAE@ABV?$basic_string@DV?$char_traits@D@stlpd_std@@V?$allocator@D@2@@stlpd_std@@I@Z) referenced in function _main
    L'impression que j'ai c'est que le fichier lib que je lui donne ne contient pas ce qu'il veut. Pourtout, j'ai regardé dedans et la chaine "options_description" existe bien.

    Là je ne sais plus quoi faire à part recoder Boost à partir de zéro.
    Donc si vous aviez une solution, je prends directement.

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Personnellement, j'ai juste mis le répertoire des .lib dans Additional Library Directory (options General de Linker). Je ne précise pas le .lib dans Input. Boost a un mécanisme qui lui permet de faire la chose tout seul. Et cela fonctionne parfaitement.
    As-tu vérifier que cette entrée (Additional Library Directory) contient bien le répertoire où sont les .lib ?

  3. #3
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Bonjour,

    Je viens de m'y remettre un coup et j'ai fouillé dans les .h de boost et je suis tombé sur la macro BOOST_LIB_DIAGNOSTIC. Et effectivement il fait le link automatiquement.

    Et maintenant lorsque je compile je peux voir le nom des librairies que boost link. Et j'ai bien le fichier
    Linking to lib file: libboost_program_options-vc90-mt-p-1_38.lib
    Mais j'ai toujours le même problème de link. J'y comprend rien.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Question bête : essaies-tu de lier avec la bibliothèque qui a les mêmes options (et compilé avec le même compilateur) que ton appli (multithread/monothread, unicode) ?

  5. #5
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    En cherchant un peu j'ai trouvé une piste.

    Cela viendrait du fait que je ne compile pas mon projet avec STLPORT mais la STL de microsoft.

    C'est possible mais dans ce cas, j'aimerai savoir comment je peux vérifier que je compile bien avec STLPORT.
    Une idée ?

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Non
    A tout hasard, as-tu regardé le tuto Installer boost avec Visual C++ ? Il y a peut être des infos intéressantes.

  7. #7
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Oui j'ai commencé avec cette installation, boostpro. Mais après ensuite j'ai constaté que c'était incompatible avec ma configuration actuel.
    Et oui comme je le disais, j'utilise STLPORT et je ne peux donc pas utiliser boostpro qui a été compilé avec la STL de microsoft.

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Et pourquoi ne pas compiler Boost avec ta config. Ca se fait assez bien. Je ne me souvient pas avoir eu de problème.

  9. #9
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    J'ai déjà compiler BOOST avec STLPORT. C'est justement cette version de boost que j'essaye de compiler mais rien n'y fait.

    Je viens de faire un test. J'ai réussi à compiler mon programme en utiliser les STL de microsoft et BOOST PRO.

    Mais par contre, j'ai lancé mon programme de traitement et cette version du programme est environ 50% plus lent que le même programme sans ma liste de test pour boost. Soit passé d'un traitement de 43 minutes à 87 minutes.
    Ca ne va pas passé avec cette durée.

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    As-tu désactivé les vérifications de la STL de microsoft ?

  11. #11
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Ouais j'ai tout mis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #define _SECURE_SCL 0
    #define _SECURE_SCL_THROWS
    #define _SCL_SECURE_NO_DEPRECATE
    #define _CRT_SECURE_NO_WARNINGS
    #define _HAS_ITERATOR_DEBUGGING 0
    #define _CRT_NONSTDC_NO_DEPRECATE 1

  12. #12
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Ca y est je reviens pour nième fois sur le même problème.

    Il devient de plus en plus difficile de le contourner. Bref.

    Je voulais repartir depuis le début, recompiler boost avec STLPORT. Mais je n'arrive plus à retrouver la méthode.
    Trop fort, trop chiant

    Quelqu'un aurait la procédure en stock chez lui ?
    Ou mieux quelqu'un aurait les fichiers .lib et .dll résultant de cette compilation ?

    Merci d'avance

  13. #13
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Ca y est je pense que j'ai un peu avancer mais j'ai lutté. Le problème c'est que ce n'est pas encore fini.
    Je suis retombé sur un os.

    Déjà pour commencer, j'ai recompilé STLPORT avec le paramètre --use_boost <BOOST PATH>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C:\STLport>configure msvc9 --rtl-dynamic --use-boost C:\boost
    C:\STLport\build\lib>nmake /fmsvc.mak
    Mais pour que cela compile il faut rajouter une ligne dans le fichier <PATH_STLPORT>\stlport\stl\type_traits.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifdef _STLP_USE_BOOST_SUPPORT
    #  include <stl/boost_type_traits.h>
    #  include <boost/type_traits/add_reference.hpp>
    #  include <boost/type_traits/add_const.hpp>
    #  include <boost/type_traits/remove_const.hpp> // <= Ligne à rajouter
    #endif /* _STLP_USE_BOOST_SUPPORT */
    Puis dans le fichier <PATH_STLPORT>\stlport\stl\config\user_config.h, il faut décommenter la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define _STLP_USE_BOOST_SUPPORT 1
    Maintenant STLPORT compile correctement. C'est magnifique.

    Ensuite, j'ai compiler boost avec la commande suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\boost>bjam toolset=msvc stdlib=stlport-5.2 --link=static --build-type=complete stage variant=debug,release link=static threading=multi
    Maintenant je compile mon programme de test et j'ai des erreurs de template.
    Voici un résumé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1>c:\_dev\include\stlport\functional(124) : error C2977: 'boost::function' : too many template arguments
    1>        c:\_dev\include\boost\function\function_fwd.hpp(33) : see declaration of 'boost::function'
    1>c:\_dev\include\boost\function\function_template.hpp(1098) : error C2977: 'boost::function' : too many template arguments
    1>        c:\_dev\include\boost\function\function_template.hpp(1020) : see declaration of 'boost::function'
    Quelqu'un aurait une idée pour mon problème.
    S'il vous plait.

    Merci d'avance

  14. #14
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    A tout hasard, il ressemble à quoi ton code à cet endroit ?

  15. #15
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Le problème c'est que les erreurs sont dans les fichiers de STLPORT et BOOST.

    En allant dans ces fichiers, je comprends le problème mais ... je ne peux rien faire.

    c:\_dev\include\stlport\functional
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    namespace boost {
    class bad_function_call;
    template<typename Signature, typename Allocator >
    class function;
    template<typename Signature, typename Allocator>
    void swap(function<Signature, Allocator>& f1, function<Signature, Allocator>& f2);
    }
    c:\_dev\include\boost\function\function_fwd.hpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    template<typename Signature> class function;
    Sinon mon code de test est très simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <boost/program_options.hpp>
     
    using namespace std;
    namespace po = boost::program_options;
     
    int main ( int argc, const char* argv[] )
    {
    	po::options_description desc("Allowed options");
    	desc.add_options()
    		("help", "produce help message")
    		("compression", po::value<int>(), "set compression level");
    }

  16. #16
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
    C'est un conflit de CRT ça. Ca veut dire qu'il faut builder ton projet et toutes tes libs avec les mêmes options en release et en debug. (/MD, etc...)

  17. #17
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Effectivement, je n'ai plus ce problème.

    Maintenant j'ai un problème de link avec les templates entre STLPORT et BOOST.

  18. #18
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    C'est visiblement un problème de compatibilité de versions, l'allocateur en tant que paramètre template dans boost::function a disparu entre les versions 1.35 et 1.36 de boost.

    MAT.

  19. #19
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Ca veut dire quoi ?

    Il faut que j'utilise une ancien version de boost, par exemple la 1.35 ?

  20. #20
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Soit ça soit tu n'actives pas le support boost dans stlport, j'imagine que c'est possible de faire sans.

    MAT.

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/01/2011, 15h29
  2. Problème pour insérer des librairies
    Par johann974 dans le forum Débuter
    Réponses: 7
    Dernier message: 18/04/2008, 16h53
  3. Réponses: 4
    Dernier message: 06/03/2008, 10h22
  4. problème de link des fichiers moc
    Par scol30 dans le forum Qt
    Réponses: 3
    Dernier message: 30/12/2006, 16h12
  5. Problème d'importation des librairies j2ee
    Par had35 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 28/08/2006, 12h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo