【问题标题】:Error while loading shared libraries: /usr/local/lib64/libssl.so.1.1加载共享库时出错:/usr/local/lib64/libssl.so.1.1
【发布时间】:2017-08-07 06:33:51
【问题描述】:

我正在尝试在 Centos 7 (7.3.1611) 上编译 openssl-1.1.0e 但是在我成功编译所有内容而没有任何警告之后,我在尝试任何 openssl 命令时都会出错

[mdm@dev openssl-1.1.0e]$ openssl version
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

这是一个错误还是我的错误?

下面是关于我的系统/配置的一些信息

配置:

[mdm@dev openssl-1.1.0e]$ ./Configure linux-x86_64 --prefix=/usr/local --openssldir=/usr/local

制作/制作测试:

...
All tests successful.
Files=91, Tests=486, 44 wallclock secs ( 0.47 usr  0.08 sys + 27.72 cusr 13.41 csys = 41.68 CPU)
Result: PASS
...

进行安装:

...
install libcrypto.a -> /usr/local/lib64/libcrypto.a
install libssl.a -> /usr/local/lib64/libssl.a
install libcrypto.so.1.1 -> /usr/local/lib64/libcrypto.so.1.1
link /usr/local/lib64/libcrypto.so -> /usr/local/lib64/libcrypto.so.1.1
install libssl.so.1.1 -> /usr/local/lib64/libssl.so.1.1
link /usr/local/lib64/libssl.so -> /usr/local/lib64/libssl.so.1.1
...

但是如果我用 ldd 检查,尽管 Make install 完成了它的工作,但没有找到两个库......

[mdm@dev openssl-1.1.0e]$ ldd /usr/local/bin/openssl
linux-vdso.so.1 =>  (0x00007fffcfe75000)
/lib/$LIB/liblsp.so => /lib/lib64/liblsp.so (0x00007fa5cd77a000)
libssl.so.1.1 => not found
libcrypto.so.1.1 => not found
libdl.so.2 => /lib64/libdl.so.2 (0x00007fa5cd55d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa5cd341000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa5ccf7f000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa5cd981000)

我已经通过 distro 安装了一个版本的 openssl:

[mdm@dev]$ openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

[mdm@dev]$ which openssl
/usr/bin/openssl

yum 信息 openssl:

...
Installed Packages
Name        : openssl
Arch        : x86_64
Epoch       : 1
Version     : 1.0.1e
Release     : 60.el7_3.1
Size        : 1.5 M
Repo        : installed
From repo   : updates
...

感谢任何帮助或建议!

【问题讨论】:

  • /sbin/ldconfig -p 能提供什么?安装后是否显示库? /sbin/ldconfig -n /usr/local/lib64 有帮助吗?
  • 是的,现在它正在使用 lib64:libssl.so.1.1 => /usr/local/lib64/libssl.so.1.1 (0x00007f48a2c45000) libcrypto.so.1.1 => /usr/local/lib64/libcrypto.so.1.1 (0x00007f48a27a1000)@jww

标签: compilation linker openssl centos7 ldd


【解决方案1】:

有时,当您想爬山时,您只看山顶,而不检查是否有东西可以帮助您在基地...

在我的情况下,我解决了在再次编译之前导出LD_LIBRARY_PATH 的问题。

export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64

之后

sudo ldconfig

重启机器后也应该保存路径(以及下次)

【讨论】:

  • 在 openssl github issue #1740987654321@上有一个类似的问题
【解决方案2】:

试试这个:

ldd libssl.so   ->  libcrypto.so.1.1 => not found
sudo ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007f17d46c7000)

【讨论】:

  • 我认为将符号链接指向系统范围的 /lib64 可能不是一个好主意。在我看来,最好将本地编译的内容与系统管理的内容分开
【解决方案3】:

感谢莱维特,RenatoXSR

OpenSSL 1.1.0gCentOS 7.2.1511,你可以试试这个

sudo bash -c "echo '/usr/local/lib64' >> /etc/ld.so.conf"
sudo ldconfig

this link解释问题原因

RPATH 的使用不一致。在某些系统上,ld.so 甚至在查看 LD_LIBRARY_PATH 之前就考虑了 RPATH,这使得它难以覆盖,例如在测试新的 OpenSSL 构建 (!) 时。我们通过破解 LD_PRELOAD 在 1.1.0 之前的版本中这样做了,但是有一些消毒剂不同意这一点,这也让生活变得艰难,例如在测试新的 OpenSSL 构建时(!)

this link给出了一个解决方案的例子

【讨论】:

    【解决方案4】:

    我知道这已经晚了,但就我而言,我的服务器上没有libssl.so.1.1。 有人建议 here 安装 openssl11-libs 但不是 openssl11,因为安装它可能会产生问题。

    可能通过尝试locate libssl.so.1.1 来确认您的服务器上没有libssl.so.1.1

    如果您的服务器上没有 libssl.so.1.1 库,只需执行 sudo yum install -y openssl11-libs

    它对我有用。

    【讨论】:

      【解决方案5】:

      配置:

      [mdm@dev openssl-1.1.0e]$ ./Configure linux-x86_64 --prefix=/usr/local --openssldir=/usr/local
      

      在这种情况下,您应该使用以下方式配置 OpenSSL:

      ./Configure linux-x86_64 enable-ec_nistp_64_gcc_128 -Wl,-rpath=/usr/local/lib64 \
        --prefix=/usr/local --openssldir=/usr/local
      

      默认情况下,OpenSSL 不添加 RPATH(某些 BSD 除外)。您需要在配置命令中手动指定它。一旦你手动指定它,事情就会为你“正常工作”,而不需要 LD_LIBRARY_PATH 技巧。

      enable-ec_nistp_64_gcc_128 适用于 x86_64。它使 Diffie-Hellman 的运行速度提高了 2 到 4 倍。该选项有一些限制,因此在使用时要小心(但在 x86_64 上是安全的)。

      另请参阅 OpenSSL wiki 上的 Compilation and Installation。有一个关于 RPATH 的讨论,还有一个关于 enable-ec_nistp_64_gcc_128 的讨论。

      【讨论】:

        【解决方案6】:

        在这种情况下,您应该使用以下方式配置 OpenSSL:

        ./配置linux-x86_64 enable-ec_nistp_64_gcc_128 -Wl,-rpath=/usr/local/lib64 \ --prefix=/usr/local --openssldir=/usr/local OpenSSL 默认不添加 RPATH(某些 BSD 除外)。您需要在您的 配置命令。一旦你手动指定它,事情将“只是 为您工作”,无需 LD_LIBRARY_PATH 技巧。

        我已经听从了你的建议,但如果我不指定 LD_LIBRARY_PATH 仍然会出现同样的错误,它无论如何都不起作用......

        [mdm@dev openssl-1.1.0e]$ export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64
        
        [mdm@dev openssl-1.1.0e]$ ldd /usr/local/bin/openssl 
            linux-vdso.so.1 =>  (0x00007ffc87aef000)
            /lib/$LIB/liblsp.so => /lib/lib64/liblsp.so (0x00007f57511fa000)
            libssl.so.1.1 => /usr/local/lib/libssl.so.1.1 (0x00007f5750f8c000)
            libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007f5750ae8000)
            libdl.so.2 => /lib64/libdl.so.2 (0x00007f57508cb000)
            libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f57506ae000)
            libc.so.6 => /lib64/libc.so.6 (0x00007f57502ed000)
            /lib64/ld-linux-x86-64.so.2 (0x00007f5751401000)
        [mdm@dev openssl-1.1.0e]$ openssl version
        OpenSSL 1.1.0e  16 Feb 2017
        

        看来我还是必须使用 LD_LIBRARY_PATH 我想知道这是正常的还是只是我的机器的不当行为,由于某些我的知识无法弄清楚的原因......

        【讨论】:

        • libssl.so.1.1 => /usr/local/lib/libssl.so.1.1libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 似乎表明您正在安装到 /usr/local/lib,而不是 /usr/local/lib64。我以为 Red Hat 和 Fedora 和 CentOS 等朋友使用 lib64。我想你应该改用-Wl,-rpath=/usr/local/lib。也许您也应该使用/sbin/ldconfig -p 打印ldd 缓存。它可能有一些意想不到的东西。
        • 我使用 lib64 是因为 RH 和朋友到处都在使用 lib64
        【解决方案7】:

        jk2K 解决了我的问题

        对于 OpenSSL 1.1.0g,CentOS 7.2.1511,你可以试试这个:

        sudo bash -c "echo '/usr/local/lib64' >> /etc/ld.so.conf"
        sudo ldconfig
        

        【讨论】:

          【解决方案8】:

          对于 CentOS 7+,将以下内容添加到 /etc/environment

          LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64
          

          【讨论】:

            【解决方案9】:

            我建议你使用来自EPEL repo 的半官方OpenSSL 1.1 包openssl11,而不是从头开始编译:

            # if you don't have EPEL repo yet...
            yum install -y epel-release
            
            # ...and then:
            yum install -y openssl11
            

            【讨论】:

              【解决方案10】:

              在将 openssl 从 1.0.2g 升级到 1.1.0g 后,我们遇到了同样的问题。 存在所需的库,并且存在软链接。

              sudo ldconfig 
              

              为我们工作。它重建了ldconfig缓存。

              【讨论】:

                猜你喜欢
                • 2019-06-05
                • 2020-09-12
                • 1970-01-01
                • 2013-12-15
                • 2018-10-19
                • 2019-10-02
                • 2021-07-21
                • 2022-07-22
                • 2020-07-22
                相关资源
                最近更新 更多