在Ubuntu上使用MSSQL时,freetds-dev中缺少libtdsodbc.so。

15

我正在尝试通过ODBC在Ubuntu 12.04上使MSSQL工作,我已经完全按照以下步骤进行:

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位。我打赌这就是问题所在。希望这有所帮助...
编辑2:我尝试手动从这里获取64位软件包:

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

然后我看到有一个名为这个的文件:

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

嗯,也许有一个64位版本,对吧?

所以我把odbcinst.ini指向它,但是它没有起作用。


1
将odbcinst.ini指向64位文件在我的情况下起作用了。 - tim-phillips
好的?在我的电脑上没有出现这个问题。我的答案如下,需要对配置文件进行一些更改。 - Michael B
3个回答

23
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

我在帖子中说:“编辑:我正在使用Ubuntu 64位。” - Michael B
1
/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so - Drew LeSueur

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接