Плагин SSL не работает
С горем пополам скомпиллировал плагин ССЛ, который не компиллировался по умолчанию. При его использовании получаю ошибку
Sep 04 12:49:23 vps151223 systemd[1]: Stopped 3proxy.service - 3proxy tiny proxy server.
Sep 04 12:49:23 vps151223 systemd[1]: Started 3proxy.service - 3proxy tiny proxy server.
Sep 04 12:49:23 vps151223 3proxy[23992]: /bin/3proxy: symbol lookup error: /libexec/SSLPlugin.ld.so: undefined symbol: OPENSSL_init_ssl
Sep 04 12:49:23 vps151223 systemd[1]: 3proxy.service: Main process exited, code=exited, status=127/n/a
Sep 04 12:49:23 vps151223 systemd[1]: 3proxy.service: Failed with result 'exit-code'.
Гугл рассказал, что этот метод используется в openssl 1.1.0 точно, поэтому поставил вместо 3 версии 1.1.1, но ошибка не ушла и дальше уже у меня не хватает компетенции понять что не так и что мне делать. Подскажите как правильно его скомпиллировать и подключить, пожалуйста.
+1
У меня такая ошибка, запускал через docker
/bin/3proxy: symbol lookup error: /usr/local/3proxy/libexec/SSLPlugin.ld.so: undefined symbol: COMP_get_type
OPENSSL_init_ssl есть во всех версиях начиная с 1.1.0, скорей всего у тебя не установлены хидеры/библиотеки OpenSSL, поэтому были проблемы и с компиляцией. В debian/ubuntu это пакет libssl-dev. В других линуксах может быть что-то другое. Установи библиотеки/хидеры и пересобери все с нуля.
Так вот для чего в spec-файл Федоры требует openssl-devel, понятно!
Тут выше есть еще тема, но продолжу эту. При раскомментированных строках в makefile.linux: SSLPlugin компилируется, но не запускается с OpenSSL 3.0.13 . Ubuntu 24.04 3proxy-0.9.5 /usr/local/bin/3proxy: symbol lookup error: /usr/local/3proxy/libexec/SSLPlugin.ld.so: undefined symbol: COMP_get_type
объяснение от CG:
2. КРИТИЧНЫЙ НЮАНС №1 — порядок библиотек 🔥
ld (GNU linker) обрабатывает библиотеки слева направо.
Правило простыми словами:
Библиотека должна идти ПОСЛЕ объектов, которые используют её символы
В OpenSSL:
libssl зависит от libcrypto
значит libcrypto должна идти ПОСЛЕ libssl
readelf -sW /usr/local/3proxy/libexec/SSLPlugin.ld.so | grep COMP_get_type пустой вывод
Это значит:
❌ плагин не компилировался с прямым вызовом COMP_get_type
❌ внутри ELF нет undefined-символа
OpenSSL 3 COMP_get_type — legacy-символ
Он:
✔ формально присутствует в libcrypto.so.3
❌ НЕ экспортируется в default provider
❌ доступен только через legacy provider
❌ может быть недоступен при ранней инициализации libssl
То есть:
nm → показывает что символ есть
dlopen(libssl) → символ не резолвится в runtime
Это известная особенность OpenSSL 3.
Также, SSLPlugin нет врелизе 3proxy-0.9.5 для Linux