3

伙计们,我已经安装了至少几十次 msodbcsql 包。从来没有出现过这个问题。昨天甚至花了一整天的时间来解决这个问题。

第 1 步:将 apt 密钥和 repo 添加到 sourced.list.d 第 2 步:apt-get 安装 msodbcsql17、mssql-tools、php odbc_pdo 扩展等 第 3 步:创建一个非常基本的 test.php(在所有其他现有的旧服务器 WORKS)与我的 mssql 数据库建立测试连接。

失败:

SQLSTATE[01000] SQLDriverConnect: 0 [unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.3.so.1.1' : file not found

是的,该文件存在。

我已经尝试 chmod 755 到该文件,仍然说它不存在。

我对文件做了一个 ldd ,这是输出:

    linux-vdso.so.1 (0x00007ffe13bf8000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc1e865a000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc1e8452000)
libodbcinst.so.2 => /usr/lib/x86_64-linux-gnu/libodbcinst.so.2 (0x00007fc1e823d000)
libcrypto.so.1.0.2 => not found
libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007fc1e7f67000)
libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007fc1e7d1c000)
libssl.so.1.0.2 => not found
libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007fc1e7b15000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc1e778c000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc1e73ee000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc1e71d6000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc1e6fb7000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc1e6bc6000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc1e8c65000)
libltdl.so.7 => /usr/lib/x86_64-linux-gnu/libltdl.so.7 (0x00007fc1e69bc000)
libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007fc1e678a000)
libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007fc1e6586000)
libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007fc1e637b000)
libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007fc1e6177000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fc1e5f5c000)

似乎缺少两个库。我发现我有 libssl1.1 和 1.0.0。我已经尝试为 libssl 共享对象的 1.1 和 1.0.0 版本创建符号链接。仍然得到同样的错误。

再次,是的 - 我已经复制/粘贴了错误尖叫的确切路径。路径是正确的。

我也尝试过使用 isql 命令行 - 完全相同的错误。所以这肯定与 odbc<->msodbcsql 库有关。这不是特定于 PHP/PDO/ODBC 的东西。

有趣的是,mssql-cli 命令行工具(来自 Microsoft 存储库)确实有效。对它运行 ldd 表示它不是动态可执行文件。

所涉及的所有库的已安装版本:

unixodbc = 2.3.7
libodbc1 = 2.3.7
odbcinst = 2.3.7
msodbcsql = 17.3.1.1-1

所有版本都是 Microsoft 存储库中提供的最新版本。全部在 Ubuntu 18.04 下。我只是在我的笔记本电脑上重新尝试了这个过程(我已经做过无数次了)——同样的结果。抱怨找不到驱动库。

odbcinst -j 的输出如下:

unixODBC 2.3.7
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

是的,这些文件存在于 /etc/odbcinst.ini 和 /etc/odb.ini 中。

/etc/odbcinst.ini 的内容:

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.3.so.1.1
UsageCount=1

运行“stat /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.3.so.1.1”:

Size: 2046672       Blocks: 4000       IO Block: 4096   regular file

我发现关于这个问题的信息很少。我遇到的几篇帖子要么没有解决问题,要么没有得到答复。

所以..我在这里错过了什么吗?还是我应该提交错误报告?

顺便说一句,从第一天开始,我就遇到了 Ubuntu 18.04 和 msodbc 的问题。最初,有 libcurl3/4 问题。我想现在已经解决了。但这似乎是……一个错误?

4

1 回答 1

-1

我今天遇到了完全相同的问题。apt-get -y install libssl1.0.0解决了我的问题。

于 2019-07-17T07:15:23.640 回答