2010-02-15 3 views
1

Je travaille sur un module qui utilise une bibliothèque partagée, à laquelle est liée une bibliothèque statique. La bibliothèque partagée fonctionne correctement et génère un fichier .so. Quand j'essaie de l'utiliser dans le module, j'obtiens une variété d'erreurs, dont la plupart sont basées sur stl (les collections stl sont spécifiques), au stade de la compilation. Les erreurs ressemblent:Erreurs lancées à partir de stl lors de la compilation d'un module utilisant la bibliothèque "Meschach"

In file included from /usr/include/c++/4.3/list:68,        
       from /home/gayan/LHIMo/LHI/src/CalcEngine/include/JuncNodeInfo.h:11,                   
       from /home/gayan/LHIMo/LHI/src/CalcEngine/include/RiverFlowParameter.h:11,                  
       from Main.cpp:11:            
/usr/include/c++/4.3/bits/stl_list.h:465:11: error: macro "catch" requires 3 arguments, but only 1 given 

est donné dans la plupart des endroits qui utilisent la liste, vecteur ou carte. S'il vous plaît aidez-moi à résoudre ce problème.

Exemple de code: "CalcEngine.h" dans la bibliothèque:

#ifndef LHI_CALCENGINE_H_ 
#define LHI_CALCENGINE_H_ 

extern "C"{ 
#include <matrix2.h> 
} 

class CalcEngine{ 

public: 

protected: 

}; 


#endif /* LHI_CALCENGINE_H_ */ 

Main.cpp dans l'application:

#include <iostream> 
#include <CalcEngine.h> 
#include <list> // The compilation fails as soon as this is added 

int main(int argc, char** argv){ 

    return -1; 
} 

je sens que cela a quelque chose à voir avec le fichier matrix2.h mais ne pouvait pas le localiser. Le fichier peut être trouvé

+0

plus de code! J'ai vu des erreurs STL vraiment étranges avec g ++ à cause d'erreurs de syntaxe stupides comme des points-virgules manquants après les déclarations de classe ... –

+0

Bon point. J'ai commencé à écrire un échantillon et j'ai remarqué que les erreurs surgissaient en incluant un fichier appelé matrix2.h (de la bibliothèque Meschach). J'ai inclus le code. – Gayan

Répondre

2

En faisant un googling, il semble que la bibliothèque Meschach ait une macro appelée catch (définie err.h indirectement incluse par matrix2.h), provoquant l'échec du code C++. Essayez

#undef catch 

une fois que vous avez terminé, y compris les en-têtes de Meschach et voir si fonctionne mieux.

+0

Fonctionne comme un charme. Une précision supplémentaire: dois-je utiliser #undef chaque fois que j'inclus une classe qui utilise catch? Existe-t-il un meilleur moyen de le faire (c'est-à-dire, undef catch globalement)? – Gayan

+1

Oui. Chaque fois que vous incluez err.h directement ou indirectement, vous devez annuler la capture. Je vous recommande de créer un fichier appelé quelque chose comme meschach.h et d'inclure tous les en-têtes dont vous avez besoin suivi de #undef catch. Maintenant, vous incluez ce fichier au lieu des en-têtes spécifiques pour éviter les problèmes. Une autre approche serait de voir si vous trouvez une bibliothèque différente pour votre but qui a été écrit de ce côté de y2k. Même si c'est une bibliothèque C, c'est vraiment un mauvais comportement de redéfinir les captures. Cependant, il est une circonstance indulgente que le code est de 1993. – Laserallan

+0

vient de tomber sur def pour "max" qui jouait avec d'autres fichiers include que j'utilisais :). Je vais commencer à chercher une alternative. J'ai essayé de contacter les auteurs mais les adresses données sur le site ne sont pas correctes. Merci beaucoup Laserallan. Je ne pense pas que j'aurais compris cela dans un million d'années. – Gayan

Questions connexes