Ubuntu16.04下sqlcmd找不到已存在的libmsodbcsql-17.0.so.1.1库
解决Ubuntu 16.04下sudo sqlcmd找不到已存在的ODBC驱动库文件问题
我之前在Ubuntu 16.04的云虚拟机上碰到过完全一样的问题!明明文件就在指定路径里,sudo执行sqlcmd却死活报找不到,核心原因大多是sudo的环境变量和普通用户不一致,导致系统加载库的路径没包含驱动所在目录。下面是几个亲测有效的解决办法:
方法1:临时指定sudo的库路径执行命令
直接在sudo命令里显式设置LD_LIBRARY_PATH,强制系统加载目标驱动库:
sudo LD_LIBRARY_PATH=/opt/microsoft/msodbcsql17/lib64/ sqlcmd -S my-db.url.net -d my-db
如果这个命令能正常执行,那基本可以确定就是sudo环境下没加载到这个库路径的问题。
方法2:让sudo永久保留LD_LIBRARY_PATH环境变量
如果不想每次执行都手动指定路径,可以修改sudo的配置,让它继承普通用户的LD_LIBRARY_PATH:
- 用
visudo编辑sudoers文件(一定要用visudo,避免语法错误导致sudo失效):sudo visudo - 在文件末尾添加一行配置:
Defaults env_keep += "LD_LIBRARY_PATH" - 保存退出(按
Ctrl+O回车确认,再按Ctrl+X退出),之后再执行sudo sqlcmd就不用手动指定路径了。
方法3:检查驱动权限与注册状态
- 先确认驱动文件的权限,确保root用户能读取:
只要权限最后一组(其他用户)包含读权限(ls -l /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.0.so.1.1r),root就肯定能访问该文件。 - 重新注册ODBC驱动,确保系统能正确识别它:
sudo odbcinst -i -d -f /opt/microsoft/msodbcsql17/etc/odbcinst.ini - 验证驱动是否注册成功:
如果输出驱动的配置信息,说明注册状态正常。odbcinst -q -d -n "ODBC Driver 17 for SQL Server"
方法4:排除架构兼容性问题
虽然概率很低,但可以快速确认系统架构是否和驱动匹配:
uname -m
如果输出是x86_64,说明是64位系统,和你的64位驱动匹配;如果是i386之类的32位架构,那这个64位驱动无法使用,需要重新安装对应架构的版本。
内容的提问来源于stack exchange,提问作者Hack-R
相关产品推荐
相关产品推荐

