2009-10-27 8 views
1

J'utilise une bibliothèque statique tierce dans mon projet C++ qui dépend de libssl version 0.9.7a. Pour diverses raisons, la version libssl utilisée par mon projet est 0.9.8e.Est-ce que libssl version 0.9.8e est compatible avec 0.9.7a?

Tout fonctionnait correctement, jusqu'à ce que la troisième partie apporte une modification récente à leur bibliothèque statique. Je n'ai pas réussi à compiler mon application lorsqu'elle a inclus cette nouvelle version de la bibliothèque statique. L'ancienne version compile bien.

Je ne suis pas très familier avec ces dépendances de bibliothèque et leur rétrocompatibilité. On nous a dit que nous devions utiliser la version suggérée par le tiers. Je veux juste savoir si c'est vraiment la raison. OMI, je suppose que ce devrait être rétrocompatible, n'est-ce pas?

Toute direction pour résoudre ce problème est très appréciée.

Ce qui suit est l'erreur de compilation que je reçois:

cc1plus: note: obsolete option -I- used, please use -iquote instead 

In file included from /usr/include/openssl/e_os2.h:56, 
       from /usr/include/openssl/ssl.h:173, 
       from MyClass.cpp:28: 

/usr/include/openssl/opensslconf.h:13:30: error: opensslconf-i386.h: No such file or directory 
/usr/include/openssl/bn.h:288: error: expected ';' before '*' token 
/usr/include/openssl/bn.h:304: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:407: error: 'BN_ULONG' was not declared in this scope 
/usr/include/openssl/bn.h:450: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:451: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:452: error: 'BN_ULONG' has not been declared 
/usr/include/openssl/bn.h:453: error: 'BN_ULONG' has not been declared 
/usr/include/openssl/bn.h:454: error: 'BN_ULONG' has not been declared 
/usr/include/openssl/bn.h:455: error: 'BN_ULONG' has not been declared 
/usr/include/openssl/bn.h:456: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:471: error: 'BN_ULONG' has not been declared 
/usr/include/openssl/bn.h:764: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:765: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:766: error: variable or field 'bn_sqr_words' declared void 
/usr/include/openssl/bn.h:766: error: 'BN_ULONG' was not declared in this scope 
/usr/include/openssl/bn.h:766: error: 'rp' was not declared in this scope 
/usr/include/openssl/bn.h:766: error: expected primary-expression before 'const' 
/usr/include/openssl/bn.h:766: error: expected primary-expression before 'int' 
/usr/include/openssl/bn.h:767: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:768: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/bn.h:769: error: 'BN_ULONG' does not name a type 
/usr/include/openssl/ssl3.h:303: error: 'PQ_64BIT' does not name a type 
/usr/include/openssl/pqueue.h:73: error: 'PQ_64BIT' does not name a type 
/usr/include/openssl/pqueue.h:80: error: 'PQ_64BIT' was not declared in this scope 
/usr/include/openssl/pqueue.h:80: error: expected primary-expression before 'void' 
/usr/include/openssl/pqueue.h:89: error: 'PQ_64BIT' has not been declared 
/usr/include/openssl/dtls1.h:92: error: 'PQ_64BIT' does not name a type 
/usr/include/openssl/dtls1.h:94: error: 'PQ_64BIT' does not name a type 

Le message d'erreur indique qu'il n'y a pas de fichier comme opensslconf-i386.h, mais il est bien présent.

Une idée de ce qui ne va pas?

Merci pour votre temps!

Répondre

3

Le pré-processeur C ne trouve pas le fichier opensslconf-i386.h - vous devez donc déterminer pourquoi cela échoue. Vous avez un avertissement du compilateur sur l'utilisation d'une option obsolète (et il recommande un correctif) - faites-le. OK - vous dites que le fichier est présent: où se trouve-t-il et quelles sont les permissions? Comment est-il inclus par opensslconf.h? En quoi cette ligne est-elle différente des autres en-têtes OpenSSL inclus? Quelles sont les options '-I' que vous utilisez autres que les '-I-' obsolètes?

À ce stade, je dirais que vous avez une installation défectueuse ou une ligne de commande impaire.

Et le titre de la question est ... pas clairement lié au corps de la question.

  • Au niveau opérationnel, oui, les deux interfonctionnement dans la plupart des cas.
  • Au niveau de la compilation, oui, les deux sont fondamentalement compatibles (ce qui fonctionnait en 0.9.7a devrait fonctionner avec 0.9.8e). Au niveau interne et au niveau de la configuration, il y aura de petites différences; il peut y avoir des chiffres supplémentaires ou des modes pris en charge par la version la plus récente, par exemple.
+0

@Jonathan: Merci beaucoup pour votre réponse! Je pense, j'ai fait un peu de progrès avec vos suggestions. J'ai écrit un exemple de client en utilisant la bibliothèque statique pour tester ce problème de manière isolée et voir si l'exemple de client compile bien (mon application est un monstre). L'exemple de client compilé correctement sans aucun problème. Donc, le problème, comme vous l'avez suggéré, semble être la ligne de commande. Je vais maintenant jeter un coup d'œil aux options de ligne de commande utilisées, et revenir vers vous si j'ai des doutes. – Srikanth

+0

@Jonathan: Je suppose que j'ai trouvé la cause première. Les bibliothèques OpenSSL n'étaient pas incluses dans le fichier make de mon application. J'ai ajouté '/ usr/include/openssl $' et mon application compile bien. Merci encore pour votre aide! – Srikanth

+0

Heureux que vous soyez à nouveau opérationnel. –

Questions connexes