Совместима ли версия 0.9.8e libssl с 0.9.7a?
Я использую стороннюю статическую библиотеку в своем проекте C++, которая зависит от версии 0.9.7a libssl. По разным причинам используемая моим проектом версия libssl - 0.9.8e.
Все работало нормально, пока третья сторона не внесла недавние изменения в свою статическую библиотеку. Я не смог успешно скомпилировать свое приложение, когда оно включало эту новую версию статической библиотеки. Старая версия компилируется нормально.
Я не очень знаком с этими библиотечными зависимостями и их обратной совместимостью. Нам сказали, что мы должны использовать версию, предложенную третьей стороной. Я просто хочу знать, действительно ли это причина. ИМО, я думаю, это должно быть обратно совместимо, не так ли?
Любое направление с устранением неполадок в этом вопросе очень ценится.
Вот ошибка компиляции, которую я получаю:
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
В сообщении об ошибке говорится, что такого файла, как opensslconf-i386.h, нет, но он действительно присутствует.
Есть идеи, что не так?
Спасибо за ваше время!
1 ответ
Препроцессор C не находит файл opensslconf-i386.h, поэтому вам нужно выяснить, почему это не работает. Вы получили предупреждение от компилятора об использовании устаревшей опции (и она рекомендует исправить) - сделайте это.
Хорошо, вы говорите, что файл присутствует: где он находится и какие у него разрешения? Как это включено opensslconf.h? Чем эта строка отличается от любых других включенных заголовков OpenSSL. Какие параметры "-I" вы используете, кроме устаревшего "-I-"?
На этом этапе я бы сказал, что у вас либо неправильная установка, либо странная командная строка.
И название вопроса... явно не связано с телом вопроса.
- На оперативном уровне, да, два взаимодействия для большинства целей.
- На уровне компиляции, да, они в основном совместимы (то, что работало в 0.9.7a, должно работать с 0.9.8e).
- На внутреннем уровне и уровне конфигурации будут небольшие отличия; например, могут быть дополнительные шифры или режимы, поддерживаемые более свежей версией.