1

我正在尝试按照以下说明为 Debian 安装 ODBC 驱动程序:https ://blog.afool​​ishmanifesto.com/posts/install-and-configure-the-ms-odbc-driver-on-debian/

但是试图运行:

sqlcmd -S 本地主机

我得到错误

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

这些都没有帮助。

4

1 回答 1

10

由于我对 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
    
  • 然后找出您的系统上是否有(希望兼容的)库。一个很好的起点是/usr/lib/。但不是最近,Debian 已经开始将库迁移到/usr/lib/<host-triplet>,并<host-triplet>描述了目标架构。如果您的应用程序确实是为您正在运行的体系结构构建的(例如,对于 linux-amd64),您可以找出默认值,您可以通过运行以下命令来获取字符串:

      $ gcc -print-multiarch
    

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

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

      # cd /usr/local/lib/
      # ln -s /usr/lib/x86_64-linux-gnu/libfoo.so.1.0.0 libfoo.so.10
    
  • 最后,您可能需要刷新动态链接器的缓存,以便它开始使用新库,ldconfig方法是以 root/超级用户身份运行。

于 2014-05-26T14:31:27.883 回答