Golang使用Databricks ODBC报错找不到libsparkodbc_sb64.so问题咨询
问题根因
你遇到的报错本质是架构不兼容导致的动态链接器无法加载.so文件,并非文件真的不存在:
你的运行环境是M1芯片(arm64架构)的Mac上运行Docker容器,os.Stat()仅能检测文件系统层面的文件存在性,无法验证文件架构是否和当前运行环境匹配。你下载的Databricks官方ODBC驱动如果是默认x86_64版本,在arm64架构的Debian容器中会被动态链接器判定为无效文件,就会抛出"file not found"错误。
解决方案
按以下顺序排查即可解决:
- 第一步:验证架构匹配
在容器内执行uname -m确认系统架构:- 如果输出为
aarch64,则下载对应arm64版本的Simba Spark ODBC驱动替换现有驱动文件 - 如果输出为
x86_64,确认Docker启动时添加了--platform linux/amd64参数,且Docker Desktop已开启Rosetta 2转译支持
- 如果输出为
- 第二步:检查动态链接依赖
执行命令ldd /opt/simba/spark/lib/64/libsparkodbc_sb64.so检查驱动的依赖库是否完整,如果输出中有标记为not found的依赖项,执行以下命令安装常用依赖:apt update && apt install -y libodbc1 libssl-dev libsasl2-modules-gssapi-mit - 第三步:验证ODBC系统配置
检查/etc/odbcinst.ini文件中的驱动配置是否正确,示例配置如下:
配置完成后先用unixODBC自带的[Databricks ODBC Driver] Driver=/opt/simba/spark/lib/64/libsparkodbc_sb64.so ODBCInstLib=libodbcinst.so UsageCount=1isql工具测试连通性,排除Go代码问题:isql -v 你的DSN名称 - 第四步:验证Go侧配置
确认Go代码中的DSN字符串的Driver参数和odbcinst.ini中配置的驱动名称完全一致,或者直接在DSN中指定完整的驱动路径。
内容的提问来源于stack exchange,提问作者James Palawaga
相关产品推荐
相关产品推荐

