php - 编译过时的 PHP 会产生带有 OpenSSL 函数的核心转储。OpenSSL 版本不匹配?
问题描述
我使用这些 ./config 选项编译了 OpenSSL 0.9.8x:
./config --prefix=/usr/local/openssl-0.9.8 --openssldir=/usr/local/openssl-0.9.8
我正在使用这些 ./configure 选项(以及其他选项)编译我的 PHP 版本:
--with-openssl=/usr/local/openssl-0.9.8
--with-openssl-dir=/usr/local/openssl-0.9.8
问题是,当我运行 PHP 脚本时,openssl_public_encrypt
我遇到了分段错误。
这是 gdb 所说的:
Program terminated with signal 11, Segmentation fault.
#0 0x00007fd3381c5a48 in RSA_public_encrypt () from /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
在 /usr/local/openssl-0.9.8/lib/ 中有 libcrypto.so.0.9.8 那么为什么不使用它呢?
这是我的 OpenSSL Makefile:
这是我的 PHP Makefile:
这是重现该问题的 Dockefile:
有任何想法吗?谢谢!
解决方案
问题是 ld-linux 在运行时将链接解析到错误的库。
尝试通过设置 LD_LIBRARY_PATH 来执行它:
LD_LIBRARY_PATH=/usr/local/openssl-0.9.8/lib php very_old_php_44_script_which_shall_not_be_used.php
如果它有效,您可能希望使用以下命令执行它:LD_DEBUG=all php ...
检查动态链接器在何处以及为什么不使用 0.9.8 openssl 版本。
推荐阅读
- azure - 需要将应用程序洞察力与 hockeyapp 应用程序联系起来
- c# - Bot Framework v3:如何正确执行用户注销?
- javascript - 将 Json 对象显示为字符串而不是实际对象
- python - 使用 python ctypes.windll.ODBCCP32.SQLConfigDataSource 添加 ODBC 用户 DSN
- r - 使用 fread 根据日期读取特定行
- android - 运行存储为字符串的 Kotlin 会出现运行时错误
- php - Sylius/FriendsOfSymfony:什么是“令牌”授予类型?
- python - pynput 无法识别小键盘上的键
- bash - 根据最后一个字符串对行进行排序并删除除一行之外的所有行?
- robotframework - 将只有 `__new__` 的 Python 类导入机器人框架