libcrypto.so.10:无法打开共享对象文件:没有这样的文件或目录

use*_*844 0 debian odbc libssl libcrypto

我试图根据这些说明为Debian安装ODBC驱动程序:https://blog.afool​​ishmanifesto.com/posts/install-and-configure-the-ms-odbc-driver-on-debian/

但是试图运行:

sqlcmd -S localhost

我收到了错误

libcrypto.so.10:无法打开共享对象文件:没有这样的文件或目录

可能是什么原因?

到目前为止我已经尝试过

1.
    $ cd /usr/lib 
     $ sudo ln -s libssl.so.0.9.8 libssl.so.10
     $  sudo ln -slibcrypto.so.0.9.8 libcrypto.so.10
2.
/usr/local/lib64 to the /etc/ld.so.conf.d/doubango.conf file

3.
sudo apt-get update
sudo apt-get install libssl1.0.0 libssl-dev

cd /lib/x86_64-linux-gnu
sudo ln -s libssl.so.1.0.0 libssl.so.10
sudo ln -s libcrypto.so.1.0.0 libcrypto.so.10

4. Sudo apt-get install libssl0.9.8:i386
Run Code Online (Sandbox Code Playgroud)

这些都没有帮助.

uml*_*ute 5

由于我对Debian和编程非常熟悉,这里有一些建议:

  • 如果您对设置系统有疑问,可以在Unix和Linux上询问SuperUser和/或(如果您的问题特定于Un*x风格)

  • 当使用符号链接到共享库时,您应该彻底了解自己在做什么.这些文件的名称是有原因的 - 原因是为了保护您(系统用户)免受奇怪的崩溃,因为应用程序使用了错误/不兼容的库.

  • 一个告诉你这样做的教程,应该给出适当的警告和解释你要做什么.

那么,为什么您正在遵循教程中的这些说明?

您尝试运行的应用程序已被链接libcrypto.so.在开发人员机器上,libcrypto.so是一个符号链接libcrypto.so.10,但Debian上缺少这个:可能因为库已被删除(并被一个新的和不兼容的版本所取代),或者因为Debian使用了不同的命名方案作为用于编译应用程序.

如果是前者,则无法使用符号链接解决问题.您必须获得正确的库(或应用程序链接到正确的库).

如果是后者,您可以通过使用系统中找到的正确库文件对预期的库名称进行符号链接.(这假设两个系统之间的唯一区别确实是这样的命名方案).

那么,怎么做呢?

  • 首先,你应该找出你的应用程序真正链接到哪些库,以及缺少哪些库.

    $ ldd /path/to/my/app | grep -i "not found"
    libfoo.so.10 => not found
    
    Run Code Online (Sandbox Code Playgroud)
  • 然后找出你的系统上是否有一个(希望兼容的)库.一个好的开始是/usr/lib/.但不那么最近的Debian已经开始移动的图书馆/usr/lib/<host-triplet>,与<host-triplet>描述的目标架构.如果您的应用程序确实是为您正在运行的体系结构构建的(例如对于linux-amd64),您可以找到默认值,您可以通过运行以下内容来获取字符串:

    $ gcc -print-multiarch
    
    Run Code Online (Sandbox Code Playgroud)

    想象一下,你发现自己拥有/usr/lib/x86_64-linux-gnu/libfoo.so.1.0.0.

  • 如果您有充分的理由相信这可以作为替代品libfoo.so.10,您可以通过符号链接将找到的库提供给您的应用程序,例如

    # cd /usr/lib/x86_64-linux-gnu
    # ln -s libfoo.so.1.0.0 libfoo.so.10
    
    Run Code Online (Sandbox Code Playgroud)