Назад | Перейти на главную страницу

Ошибка OpenSSL при компиляции Apache HTTPD - неопределенная ссылка на `SSL_in_init '

Мы запускаем Apache HTTPD в качестве производственного балансировщика нагрузки, используя mod_ssl с OpenSSL. Я пытаюсь перекомпилировать Apache HTTPD в последней версии (2.4.41) и при запуске сталкиваюсь со следующей ошибкой make. Я включу ошибку, но если будет полезна дополнительная трассировка стека, я буду рад опубликовать ее.

Обратите внимание, что OpenSSL в настоящее время находится на версии 1.1.1c, и я сталкиваюсь с той же проблемой при попытке собрать Apache HTTPD версий 2.4.38 и 2.4.39.

Первоначально я думал, что это проблема совместимости между OpenSSL и Apache на основе сообщений в другом месте, но я не могу воспроизвести ошибку на новой виртуальной машине - все это компилируется без проблем. Так что это должно быть что-то сломанное в окружающей среде.

/etc/puppetlabs/tmp/httpd/httpd-2.4.41/srclib/apr/libtool --silent --mode=compile gcc -std=gnu99   -g -O2 -pthread      -DLINUX -D_REENTRANT -D_GNU_SOURCE   \
      -I. -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/os/unix -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/include -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/srclib/apr/include -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/srclib/apr-util/include -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/aaa -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/cache -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/core -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/database -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/filters -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/ldap -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/loggers -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/lua -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/proxy -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/http2 -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/session -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/ssl -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/test -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/server -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/md -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/arch/unix -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/dav/main -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/generators -I/etc/puppetlabs/tmp/httpd/httpd-2.4.41/modules/mappers  -prefer-non-pic -static -c ab.c && touch ab.lo
/etc/puppetlabs/tmp/httpd/httpd-2.4.41/srclib/apr/libtool --silent --mode=link gcc -std=gnu99  -g -O2 -pthread    \
         -o ab  ab.lo       /etc/puppetlabs/tmp/httpd/httpd-2.4.41/srclib/apr-util/libaprutil-1.la -lexpat /etc/puppetlabs/tmp/httpd/httpd-2.4.41/srclib/apr/libapr-1.la -lrt -lcrypt -lpthread -ldl -lm -lssl -lcrypto -lrt -lcrypt -lpthread -ldl
ab.o: In function `ssl_state_cb':
/etc/puppetlabs/tmp/httpd/httpd-2.4.41/support/ab.c:575: undefined reference to `SSL_in_init'
ab.o: In function `ssl_print_cert_info':
/etc/puppetlabs/tmp/httpd/httpd-2.4.41/support/ab.c:653: undefined reference to `X509_get_version'
/etc/puppetlabs/tmp/httpd/httpd-2.4.41/support/ab.c:655: undefined reference to `X509_getm_notBefore'
/etc/puppetlabs/tmp/httpd/httpd-2.4.41/support/ab.c:659: undefined reference to `X509_getm_notAfter'
ab.o: In function `sk_X509_num':
/usr/local/include/openssl/x509.h:99: undefined reference to `OPENSSL_sk_num'
ab.o: In function `sk_X509_value':
/usr/local/include/openssl/x509.h:99: undefined reference to `OPENSSL_sk_value'
ab.o: In function `main':
/etc/puppetlabs/tmp/httpd/httpd-2.4.41/support/ab.c:2305: undefined reference to `TLS_client_method'
/etc/puppetlabs/tmp/httpd/httpd-2.4.41/support/ab.c:2560: undefined reference to `TLS_client_method'
/etc/puppetlabs/tmp/httpd/httpd-2.4.41/support/ab.c:2637: undefined reference to `OPENSSL_init_ssl'
/etc/puppetlabs/tmp/httpd/httpd-2.4.41/support/ab.c:2638: undefined reference to `OPENSSL_init_ssl'
/etc/puppetlabs/tmp/httpd/httpd-2.4.41/support/ab.c:2647: undefined reference to `SSL_CTX_set_options'
ab.o: In function `test':
/etc/puppetlabs/tmp/httpd/httpd-2.4.41/support/ab.c:1990: undefined reference to `SSL_in_init'
collect2: error: ld returned 1 exit status
make[2]: *** [ab] Error 1
make[2]: Leaving directory `/etc/puppetlabs/tmp/httpd/httpd-2.4.41/support'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/etc/puppetlabs/tmp/httpd/httpd-2.4.41/support'
make: *** [all-recursive] Error 1

Обратите внимание, что каталог 'puppetlabs' создан исключительно потому, что у нас есть Puppet для обработки компиляции, хотя все, что он делает, запускается configure, make и make install по-прежнему.

Похоже, что файлы заголовков openssl можно найти для настройки и компиляции, но не для самых больших нативных / скомпилированных библиотек во время компоновки.
Возможно, вы, возможно, указали на заголовки openssl и configure или make смогли обнаружить их в этом нестандартном месте, но вы никогда не компилировали двоичные файлы или не имеют их в пути, по которому компоновщик проходит по умолчанию. Таким образом, ваша полная настройка и, если применимо, команды установки могут быть полезны, чтобы дать вам полный ответ в дополнение к командам configure и make и выводам, используемым для компиляции openssl, принадлежащего файлам заголовков в / usr / local / include / openssl.

Вероятно, вам нужно указать Openssl Libdir в configure (например, используя LDFLAGS env var), если вы хотите включить библиотеки, установленные не по пути по умолчанию во время компоновки.