懂linux程序编译的帮忙解答一下

  • e
    eos
    系统是红帽5。最近想升级ssl。其中nginx与ldap都调用了ssl的库。我ldd看了一下依赖。他们分别调用了libcrypto.so.6与libssl.so.6这个两个公共库。这个个库分别是libcrypto.so.0.98e与libssl.so.0.9.8e的链接。问题来了我新编译了openssl,生成了libcrypto.so.1.0.0 与libssl.so.1.0.0 。我手动将新库建立了软连接到libcrypto.so.6与libssl.so.6上。nginx与ldap都可以正常启动,说明替换问题不大。但是当执行ldconfig时。系统会将软连接初始化为原来的旧状态。
    我想编译openssl 让libcrypto与libssl.so的soname变成libcrypto.so.6与libssl.so.6。请问我该怎么处理?
  • r
    recfgtavic
    ld.so.conf
  • e
    eos
    我在ld.so.conf添加了新的路径,执行后依然恢复到原来的版本, 目前是这样libcrypto.so.6 -> libcrypto.so.0.9.8e 而且多出libcrypto.so.1.0.0 -> libcrypto.so.1.0.0
    我需要的是新的库链接到老的soname上需要结果是这样 libcrypto.so.6 -> libcrypto.so.1.0.0

    [本帖最后由 eos 于 2017-7-6 16:00 编辑]
  • z
    zlw
    用非标准的目录放so和软连接,启动进程时保证LD_LIBRARY_PATH里面包含这个目录,这个是个肯定有效的做法。

    直接改官方文件的做法我没做过,听起来也不靠谱。就像你的实验里面一个标准的动作(触发ldconfig)可能会根据so里面的符号重建软连接。

    假如你把官方的OpenSSL卸掉,你的做法应该也没问题。
  • l
    laobi
    重新编译nginx带新编译openssl的安装路径
  • T
    TUT
    遇到这种情况我一般会去查看ldconfig的文档甚至看看它的关键代码,同时看看openssl的make install干些什么,诸如此类