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

Langage C++ Discussion :

Erreur compilation qpdf avec xlC_r sur un Aix


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Par défaut Erreur compilation qpdf avec xlC_r sur un Aix
    Bonjour,

    J'ai un petit problème pour compiler le programme qpdf avec le compilateur d'IBM xlC_r sur un serveur Aix.
    Pour situer, qpdf (http://qpdf.sourceforge.net/) est un programme de manipulation de PDF, qui pourrait m'être utile pour faire des tests sur des PDF produits par une chaîne éditique.

    Quand je compile sur Aix, j'ai le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    xlC_r -I/home/xxxx/include -I/home/xxxx/include  -Iinclude -c examples/pdf-mod-info.cc -o examples/build/pdf-mod-info.o
    "examples/pdf-mod-info.cc", line 49.25: 1540-0218 (S) The call does not match any parameter list for "operator!=".
    "/usr/vacpp/include/xtree", line 210.22: 1540-1283 (I) "std::_Tree<class std::_Tset_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,0> >::iterator::operator!=(const iterator &) const" is not a viable candidate.
    "examples/pdf-mod-info.cc", line 49.28: 1540-0256 (I) A parameter of type "const std::_Tree<class std::_Tset_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator..." cannot be initialized with an expression of type "std::set<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,struct std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,class std::allocator<std::basic_string<...".
    "/usr/vacpp/include/utility", line 81.14: 1540-1283 (I) "template <class _T1, class _T2> std::operator!=(const pair<_T1,_T2> &, const pair<_T1,_T2> &)" is not a viable candidate.
    "/usr/vacpp/include/xutility", line 388.14: 1540-1283 (I) "template <class _RI> std::operator!=(const reverse_iterator<_RI> &, const reverse_iterator<_RI> &)" is not a viable candidate.
    "/usr/vacpp/include/xutility", line 503.14: 1540-1283 (I) "template <class _E, class _Tr> std::operator!=(const istreambuf_iterator<_E,_Tr> &, const istreambuf_iterator<_E,_Tr> &)" is not a viable candidate.
    "/usr/vacpp/include/xmemory", line 158.14: 1540-1283 (I) "template <class _Ty, class _U> std::operator!=(const allocator<_Ty> &, const allocator<_U> &)" is not a viable candidate.
    "/usr/vacpp/include/string", line 114.14: 1540-1283 (I) "template <class _E, class _Tr, class _A> std::operator!=(const basic_string<_E,_Tr,_A> &, const basic_string<_E,_Tr,_A> &)" is not a viable candidate.
    "/usr/vacpp/include/string", line 118.14: 1540-1283 (I) "template <class _E, class _Tr, class _A> std::operator!=(const _E *, const basic_string<_E,_Tr,_A> &)" is not a viable candidate.
    "/usr/vacpp/include/string", line 122.14: 1540-1283 (I) "template <class _E, class _Tr, class _A> std::operator!=(const basic_string<_E,_Tr,_A> &, const _E *)" is not a viable candidate.
    "/usr/vacpp/include/iterator", line 189.14: 1540-1283 (I) "template <class _Ty, class _E, class _Tr, class _Dist> std::operator!=(const istream_iterator<_Ty,_E,_Tr,_Dist> &, const istream_iterator<_Ty,_E,_Tr,_Dist> &)" is not a viable candidate.
    "/usr/vacpp/include/xtree", line 442.14: 1540-1283 (I) "template <class _Tr> std::operator!=(const _Tree<_Tr> &, const _Tree<_Tr> &)" is not a viable candidate.
    "/usr/vacpp/include/list", line 412.14: 1540-1283 (I) "template <class _Ty, class _A> std::operator!=(const list<_Ty,_A> &, const list<_Ty,_A> &)" is not a viable candidate.
    "/usr/vacpp/include/vector", line 319.14: 1540-1283 (I) "template <class _Ty, class _A> std::operator!=(const vector<_Ty,_A> &, const vector<_Ty,_A> &)" is not a viable candidate.
    Manifestement, le compilateur ne trouve pas la bonne méthode pour l'opérateur != . Pourtant, ce code compile parfaitement sous Linux, et a logiquement été testé par d'autres (ce n'est pas du code à moi développé dans mon coin).

    Ci-dessous, une version du code source réduite au minimum (je pense inutile de mettre le source complet sur ce forum), qui provoque tout de même le bug, avec en gras le code problématique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
    
    #include <qpdf/QPDF.hh>
    #include <qpdf/QPDFWriter.hh>
    #include <qpdf/QPDFObjectHandle.hh>
    #include <qpdf/QUtil.hh>
    #include <qpdf/QTC.hh>
    #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    
    void dumpInfoDict(QPDF& pdf,
    		  std::ostream& os = std::cout,
    		  std::string const& sep = ":\t")
    {
        QPDFObjectHandle trailer = pdf.getTrailer();
        if (trailer.hasKey("/Info"))
        {
    	QPDFObjectHandle info = trailer.getKey("/Info");
    	std::set<std::string> keys = info.getKeys();
    	for (std::set<std::string>::const_iterator it = keys.begin();
    	     keys.end() != it; ++it)
    	{
    	    QPDFObjectHandle elt = info.getKey(*it);
    	    std::string val;
    	    if (false) {}
    	    else if (elt.isString())
    	    {
    		val = elt.getStringValue();
    	    }
    	    else if (elt.isName())
    	    {
    		val = elt.getName();
    	    }
    	    else // according to PDF Spec 1.5, shouldn't happen
    	    {
    		val = elt.unparseResolved();
    	    }
    	    os << it->substr(1) << sep << val << std::endl; // skip '/'
    	}
        }
    }
    Est-ce que quelqu'un parmi vous aurait une petite idée de ce qui coince ?
    Mes seules connaissances en STL remontent à des cours il y a 10 ans en école d'ingénieur : il y a peut être des erreurs évidentes qui ne me sautent pas au yeux.

    J'ai tenté des include de <string>, <list>, <vector>, <set>, <map>, ajouté un "using namespace std;", mais sans succès. J'ai aussi modifé la syntaxe du code, mais ça ne compile pas mieux.

    Pour info, le serveur est en Aix 5.2, et pour le compilo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /home/xxxx> lslpp -L  | grep xlC
      xlC.adt.include            6.0.0.0    C     F    C Set ++ Application
      xlC.aix50.rte              8.0.0.5    C     F    C Set ++ Runtime for AIX 5.0
      xlC.cpp                    5.0.2.0    C     F    C for AIX Preprocessor
      xlC.msg.en_US.cpp          5.0.2.0    C     F    C for AIX Preprocessor
      xlC.msg.en_US.rte          8.0.0.5    C     F    C Set ++ Runtime
      xlC.rte                    8.0.0.5    C     F    C Set ++ Runtime
    /home/xxxx>
    Peut être est-ce le compilateur qui gère mal certaines syntaxe ?

    Pour info, j'ai voulu installer gcc/g++ sur cette machine, mais impossible de compiler certaines dépendances.

    Merci d'avance

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Essaie en remplacant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::set<std::string> keys = info.getKeys();
    for (std::set<std::string>::const_iterator it = keys.begin(); keys.end() != it; ++it)
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::set<std::string> keys = info.getKeys();
    for (std::set<std::string>::iterator it = keys.begin(); keys.end() != it; ++it)
    (Je ne garanti rien, je n'arrive pas a reproduire le probleme sur un exemple simplifie ici).

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Par défaut
    Bravo !

    Ca marche comme ça !
    Merci

    Il me semble avoir testé cette modif, mais peut être après une autre qui rendait le tout incompilable ...

    J'ai plus qu'à faire un rapport de bug à l'équipe de développement (pas facile avec mon anglais )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/07/2014, 03h19
  2. Erreur d'import avec NetBeans sur NetBeans 7.0
    Par L'aigle de Carthage dans le forum NetBeans
    Réponses: 0
    Dernier message: 23/05/2011, 14h13
  3. Erreur compilation InfoPath avec VS2005
    Par cnguyen dans le forum InfoPath
    Réponses: 9
    Dernier message: 31/07/2007, 08h14
  4. erreur:compilation jsp avec jdev
    Par asma06 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 11/05/2006, 16h28
  5. Erreur de paramètre avec SQL sur Delphi
    Par ghan77 dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/01/2006, 13h30

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