До компиляции openssl 1.1.0i я настроил сборку, выполнив:
# ./Configure linux-x86_64
openssl 1.1.0i, скомпилированный без явных проблем, но во время выполнения я вижу:
Error: LD: symbol not found: 'X509_it'
Я нашел то, что выглядело как соответствующий комментарий в файле CHANGES в источнике openssl:
Новая опция компиляции ASN1_ITEM_FUNCTIONS.Это заставляет новые модули ASN1 экспортировать функции, возвращающие указатели ASN1_ITEM вместо самих структур ASN1_ITEM.Это добавляет несколько новых макросов, которые обеспечивают прозрачный доступ к базовой функции / структуре ASN1.В результате код не должен использовать ссылки ASN1_ITEM напрямую (например, & X509_it), а вместо этого использовать соответствующие макросы (например, ASN1_ITEM_rptr (X509)).Эта опция позволяет разрешить использование нового кода ASN1 на платформах, где экспорт структур проблематичен (например, в разделяемых библиотеках), но экспорт функций, возвращающих указатели на структуры, не является.
Но я не нашеллюбые ссылки на ASN1_ITEM_FUNCTIONS в источнике.Затем я проверил репозиторий openssl git, чтобы отследить этот комментарий и сравнить источник в то время с 1.1.0i, и обнаружил, что параметр компиляции ASN1_ITEM_FUNCTIONS, похоже, был заменен OPENSSL_EXPORT_VAR_AS_FUNCTION в какой-то момент.В моем сгенерированном файле opensslconf.h, если он найден:
#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
Я не мог выяснить, какой вариант дать ./Configure, чтобы автоматически использовать этот параметр, поэтому я попытался изменить #undef на #define.Это компилируется, но я все еще получаю ошибку символа.
Такое ощущение, что я просто пропускаю опцию ./Configure, что мне нужно сделать, чтобы отсортировать отсутствующий символ?