Ubuntu 上的 freetds-dev - MSSQL 中缺少 libtdsodbc.so

问题描述 投票:0回答:4

我正在尝试通过 ODBC 让 MSSQL 在 Ubuntu 12.04 上运行,并且我已严格按照以下步骤操作:

http://jamesrossiter.wordpress.com/2011/03/08/connecting-to-microsoft-sql-server-using-odbc-from-ubuntu-server/

但是,这会忽略 odbcinst.ini 中指向的这两个文件:

Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so

所以,我用谷歌搜索了一下,发现了这个:

http://ubuntuforums.org/showthread.php?t=433435&page=2

所以我按照这些说明操作并将 libtdsodbc.so 放入 /usr/lib/odbc/ 中,但我仍然收到此错误:

Can't open lib '/usr/lib/odbc/libtdsodbc.so' : file not found, SQL state 01000 in SQLConnect

但是...

root@ubuntu:/usr/lib/odbc# ls -la
total 552
drwxr-xr-x  2 root root   4096 Aug 19 20:12 .
drwxr-xr-x 62 root root  12288 Aug 19 19:41 ..
-rwxrwxr-x  1 root root 270608 Aug 19 20:00 libtdsodbc.so

我在该文件上尝试了 chmod 775,这解释了权限。还是没有运气。

有什么想法吗?我很困惑。真的很想让这个在我的 Linux 机器上运行。

编辑:我使用的是 Ubuntu 64 位。我敢打赌这就是问题所在。希望有帮助...

EDIT2:我尝试从这里手动获取 64 位包:

http://www.ubuntuupdates.org/package/core/precise/main/base/tdsodbc

然后我看到有一个文件叫这个:

/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

哇,也许是 64 位版本,对吗?

所以我将odbcinst.ini指向它,但它不起作用。

sql-server t-sql ubuntu odbc freetds
4个回答
24
投票
sudo apt-get install freetds-dev

sudo apt-get install tdsodbc

现在查看 32 位:

/usr/lib/i386-linux-gnu/odbc/libtdsodbc.so

或 64 位:

/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

2
投票

我有这个解决方案:

# apt-get install stuff......

# Then:

LIBTDSODBC_FILE="$(find / | grep libtdsodbc.so | head -1)"
export LIBTDSODBC_FILE
echo "LIBTDSODBC_FILE: '$LIBTDSODBC_FILE'"

LIBTDSS_FILE="$(find / | grep libtdsS.so | head -1)"
export LIBTDSS_FILE
echo "LIBTDSS_FILE: '$LIBTDSS_FILE'"

printf "[freetds]\nDescription     = MS SQL database access with Free TDS\nDriver          = %s\nSetup           = %s\nUsageCount      = 1\n" "${LIBTDSODBC_FILE}" "${LIBTDSS_FILE}" >> /etc/odbcinst.ini \
  && printf '[mssql]\nDescription             = Microsoft SQL Server\nDriver                  = freetds\nDatabase                = database_name\nServerName              = mssql\nTDS_Version             = 8.0\n' >> /etc/odbc.ini \
  && printf '\n[mssql]\n' >> /etc/freetds/freetds.conf \
  && printf "      host = %s\n" "${TDSHOST}" >> /etc/freetds/freetds.conf \
  && printf "      port = %s\n" "${TDSPORT}" >> /etc/freetds/freetds.conf \
  && printf "      tds version = %s\n" "${TDSVER}" >> /etc/freetds/freetds.conf \
  && cat /root/.odbc.ini \
  && cat /etc/odbc.ini \
  && cat /etc/odbcinst.ini

它在为 AMD64 和 ARM64 编译的 Docker 中运行良好


1
投票

我最终在这个listserv帖子的帮助下解决了这个问题:

http://mailman.unixodbc.org/pipermail/unixodbc-support/2008-November/001842.html

除了:

Driver = TDS

应该是:

Driver = FreeTDS

我必须手动查找的那个奇怪的 64 位驱动程序也与此相关,忽略 freetds.conf 是正确的方法。

有趣的东西。


0
投票

有同样的问题,并在 LD_DEBUG=libs 下运行 isql 显示了 lib 无法加载的确切位置。命令如下

“LD_DEBUG=libs isql 主机用户 pwd -v”

就我而言,错误是:

  2574:     find library=libffi.so.7 [0]; searching
  2574:      search path=/opt/conda/bin/../lib              (RPATH from file isql)
  2574:       trying file=/opt/conda/bin/../lib/libffi.so.7
  2574:     
  2574:     /usr/lib/x86_64-linux-gnu/libp11-kit.so.0: error: symbol lookup error: undefined symbol: ffi_type_pointer, version LIBFFI_BASE_7.0 (fatal)
  [01000][unixODBC][Driver Manager]Can't open lib '/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so' : file not found

Conda 安装影响了 libffi.so.7 的链接(实际上是 8.x 版本)

所以我必须删除 conda 目录中的 2 个 so.7 文件(实际上是链接),如 https://stackoverflow.com/a/75045665 插入, 陈展文评论。之后就可以顺利运行了。

© www.soinside.com 2019 - 2024. All rights reserved.