sqlcmd无法找到存在的库(libmsodbcsql-17.0.so.1.1)

时间:2018-03-27 16:25:15

标签: sql ubuntu sqlcmd

我正在使用Ubuntu 16.04尝试使用sqlcmd从脚本中以编程方式启动,以在VM的云中执行SQL查询。

vm-dev:~$ sudo sqlcmd -S my-db.url.net -d my-db

我一直收到这个错误:

  

Sqlcmd:错误:SQL Server的Microsoft ODBC驱动程序17:无法打开   lib'/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.0.so.1.1':file   没找到。

但文件显然在那里:

vm-dev:~$ ls /opt/microsoft/msodbcsql17/lib64/
  

libmsodbcsql-17.0.so.1.1

3 个答案:

答案 0 :(得分:6)

我遇到同样的问题,这个解决方案对我有用: 你必须降级msodbcsql版本,

  1. apt-get remove msodbcsql
  2. apt-cache madison msodbcsql
  3. apt-get install msodbcsql = 13.1.9.2-1
  4. apt-cache madison mssql-tools
  5. ACCEPT_EULA = Y apt-get install mssql-tools = 14.0.6.0-1
  6. apt-mark hold mssql-tools
  7. apt-mark hold msodbcsql
  8. 我从此链接获得了此解决方案:

    https://github.com/Microsoft/msphpsql/issues/684

答案 1 :(得分:6)

仅针对那些在Ubuntu 18.04上遇到相同问题并来到这里但仍未通过可接受的答案解决问题的人,因为它的目标是Ubuntu 16.04,共享另一个可能的解决方案,并已通过Ubuntu 18.04 docker容器进行了测试依赖于Microsoft的odbc驱动程序的Python 3.6应用程序。

第1步:检查库依赖性

使用命令ldd检查是否满足所有库依赖关系。在我的环境中,缺少的库是 libssl1.0.0 libgssapi-krb5-2 。下面是该命令及其依赖项缺失的示例,如果您愿意,grepnot found的输出。

$ ldd /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.2.so.0.1 

libfoo.so => /path/to/lib/foo/libfoo.so
libbar.so => /path/to/lib/bar/libbar.so
libbaz.so => not found

第2步:检查谁提供了缺少的依存关系

使用dpkg search检查哪个软件包提供了缺少的依赖关系。

$ dpkg -S libbaz.so

libbaz:amd64: /usr/lib/x86_64-linux-gnu/libbaz.so.1.2.3,

第3步:安装缺少的依赖项

$ sudo apt install libbaz

答案 2 :(得分:0)

我留下适用于我的脚本。

我的问题与你的问题非常相似,我测试了所有选项,例如更改驱动程序位置,制作符号链接,修改/etc/*.ini文件等等......没有任何效果。

我的问题,在alpine的docker容器中运行python 3.6,pyodbc包是库 libssl1.0.0

您可以在此处使用驱动程序v13

找到my installation script for pyodbc Debian 8 (alpine) docker image
  

DRIVER = {SQL Server的ODBC驱动程序13}

我为数据库连接运行的命令是:

import pyodbc
connection_string = 'DRIVER={ODBC Driver 13 for SQL Server};'
connection_string += 'SERVER={0};DATABASE={1};UID={2};PWD={3};'.format(host,dbname,user,pwd)
connection = pyodbc.connect(connection_string)