('01000', "[01000] [unixODBC][Driver Manager]无法打开 lib '/opt/simba/spark/lib/64/libsparkodbc_sb64.so': 找不到文件 (0) (SQLDriverConnect)"
('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/opt/simba/spark/lib/64/libsparkodbc_sb64.so' : file not found (0) (SQLDriverConnect)")
我试图让 Databricks ODBC 驱动程序在 Golang 上运行。我按照 https://github.com/alexbrainman/odbc 上的说明设置了 Go 库和系统库。
我没有设置 MSSQL ODBC 驱动程序,而是安装了 Databricks 的 ODBC 驱动程序并将系统配置为使用它。我重新使用了 mssql_test.go 文件来创建一个测试台来测试与 Databricks 的连接,使用 DSN/connection 字符串我使用 guide from their website.
构建
但是,当尝试连接到数据库时,出现错误:
('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/opt/simba/spark/lib/64/libsparkodbc_sb64.so' : file not found (0) (SQLDriverConnect)")
无论我如何更改连接字符串、LD_LIBRARY 路径或其他任何内容,我似乎都无法正常工作。它反复给出这个错误,即使我在 Go 中对该文件执行 os.Stat()
,我也可以清楚地看到它存在于执行环境中。
我是 运行 Go/the Debian linux 容器用户 docker 内的驱动程序,在我的 M1 Macbook 上。
在这种情况下,找不到文件的原因是驱动程序没有为ARM编译。这 post on Github 说明了这个问题。
我们可以通过图书馆运行file
来确认。它产生...
$> file /opt/simba/spark/lib/64/libsparkodbc_sb64.so
/opt/simba/spark/lib/64/libsparkodbc_sb64.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
你可以看到它是为x86-64编译的,但平台实际上是ARM。不好!
有几个不同的选项可以解决这个问题:
- 如果您有驱动程序的源代码,请将驱动程序重新编译为目标 ARM。
- 如果您在 docker 上构建,您或许可以重建 docker 容器以改用 x86 平台。您可以使用
--platform linux/amd64
构建标志到您的 Dockerfile(例如 FROM --platform=linux/amd64 golang:1.17
或您的构建命令。
- build/test/deploy x86 环境中的代码。
就 Databricks 而言,他们已意识到该问题,并且即将推出基于 ARM 的驱动程序。
我试图让 Databricks ODBC 驱动程序在 Golang 上运行。我按照 https://github.com/alexbrainman/odbc 上的说明设置了 Go 库和系统库。
我没有设置 MSSQL ODBC 驱动程序,而是安装了 Databricks 的 ODBC 驱动程序并将系统配置为使用它。我重新使用了 mssql_test.go 文件来创建一个测试台来测试与 Databricks 的连接,使用 DSN/connection 字符串我使用 guide from their website.
构建但是,当尝试连接到数据库时,出现错误:
('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/opt/simba/spark/lib/64/libsparkodbc_sb64.so' : file not found (0) (SQLDriverConnect)")
无论我如何更改连接字符串、LD_LIBRARY 路径或其他任何内容,我似乎都无法正常工作。它反复给出这个错误,即使我在 Go 中对该文件执行 os.Stat()
,我也可以清楚地看到它存在于执行环境中。
我是 运行 Go/the Debian linux 容器用户 docker 内的驱动程序,在我的 M1 Macbook 上。
在这种情况下,找不到文件的原因是驱动程序没有为ARM编译。这 post on Github 说明了这个问题。
我们可以通过图书馆运行file
来确认。它产生...
$> file /opt/simba/spark/lib/64/libsparkodbc_sb64.so
/opt/simba/spark/lib/64/libsparkodbc_sb64.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
你可以看到它是为x86-64编译的,但平台实际上是ARM。不好!
有几个不同的选项可以解决这个问题:
- 如果您有驱动程序的源代码,请将驱动程序重新编译为目标 ARM。
- 如果您在 docker 上构建,您或许可以重建 docker 容器以改用 x86 平台。您可以使用
--platform linux/amd64
构建标志到您的 Dockerfile(例如FROM --platform=linux/amd64 golang:1.17
或您的构建命令。 - build/test/deploy x86 环境中的代码。
就 Databricks 而言,他们已意识到该问题,并且即将推出基于 ARM 的驱动程序。