AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 935998
Accepted
user2845840
user2845840
Asked: 2018-10-18 09:05:45 +0800 CST2018-10-18 09:05:45 +0800 CST 2018-10-18 09:05:45 +0800 CST

构建 PHP 5.3.3 时与 OpenSSL 相关的链接器错误

  • 772

在尝试在启用 OpenSSL 扩展的 Debian jessie 上构建 PHP 5.3.3 时(不问原因,节省一些理智),我undefined reference to symbol 'X509_free@@OPENSSL_1.0.0'在 Makefile 的链接步骤中遇到,无法弄清楚为什么 (libssl-dev存在并libssl.so包含请求的符号)。我尝试使用pbuilder包含 Debian jessie 以及更新的库(如 OpenSSL 1.0.1 而不是 0.9.8)的基于 chroot 的环境构建 Debian 挤压中包含的官方 Debian 软件包。我确认 PHP 5.3.3 与 OpenSSL 1.0.1 兼容,方法是在 chroot 环境之外使用./configure --disable-all --with-openssl=/usr; make. 生成的 CGI 和 CLI 二进制文件确实与 OpenSSL 相关联,这可以通过ldd sapi/cli/php. 然而在 chroot 环境中,它失败了。

不要打扰,我已经找出了大部分原因和解决方法/黑客来实现成功的构建。

debian-squeeze
  • 1 1 个回答
  • 220 Views

1 个回答

  • Voted
  1. Best Answer
    user2845840
    2018-10-18T09:05:45+08:002018-10-18T09:05:45+08:00

    除了使 libssl.so 和 libcrypto.so 在正确的位置(/usr/lib/而不是/usr/lib/x86_64-linux-gnu/)可用,我已经通过符号链接解决了这个问题,我不得不解决新生成的配置脚本在 chroot 环境中所犯的错误。在 chroot 环境之外,我没有费心通过重新创建配置脚本,./buildconf --force并且这个原始脚本工作正常。但是 Debian 软件包试图做正确的事情,并在调用之前以这种方式重新创建配置脚本。不幸的是,新创建的配置脚本与原来的有很大不同,并错误地确定 libcrypto.so 缺少该符号DSA_get_default_method,因此没有添加-lcrypto到EXTRA_LIBSMakefile 中的变量。这就是链接失败的原因。原始配置脚本使用相同的库进行大致相同的测试,但正确确定符号存在,这就是原始配置脚本链接成功的原因。我认为这与不同的 autoconf 版本有关(PHP 5.3.3 至少需要 2.63,但 jessie 有 2.69),但我没有尝试深入挖掘,因为我已经受够了。

    相反,我只是编辑了由损坏的配置脚本创建的 Makefile sed,并将丢失的内容添加-lcrypto回EXTRA_LIBS变量中。构建成功,生成的 PHP 链接到 OpenSSL 1.0.1,并且可以成功打开 SSL 连接。如果你自己尝试这个并且你的服务器爆炸了,不要怪我——这只是一个 hack,正确的解决方案是找出 autoconf 问题。

    • 0

相关问题

  • PTR 配置尝试后的 SERVFAIL (BIND 9)

  • 如何允许在圆形立方体中编辑发件人地址

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve