64 和 32 位应用程序使用的 /etc/odbcinst.ini

64 和 32 位应用程序使用的 /etc/odbcinst.ini

我有以下/etc/odbcinst.ini文件

[root@]# cat /etc/odbcinst.ini
[FreeTDS]
Description=FreeTDS odbc driver
#Driver=/usr/lib/libtdsodbc.so.0
Driver=/usr/lib64/libtdsodbc.so.0
UsageCount=1

我有针对 64 位和 32 位编译的应用程序。

[root@]# ldd prog_32 | grep odbc
        libodbc.so.2 => /lib/libodbc.so.2 (0xf7563000)
[root@]# ldd prog_64 | grep odbc
        libodbc.so.2 => /lib64/libodbc.so.2 (0x00007f6087202000)

正如您可能注意到的那样,我在odbcinst.ini驱动程序文件中有 2 个条目,一个用于 32 位,另一个用于 64 位。问题是,如果我运行为 64 位编译的程序,而驱动程序是 32 位,或者相反,我的程序将失败运行时出现错误

OTL error message = [unixODBC][Driver Manager]Can't open lib '/usr/lib/libtdsodbc.so.0' : file not found

所以我去更换驱动程序条目,odbcinst.ini直到下次它会发生在我身上,这是相当频繁的。

有没有办法对 64 位应用程序使用 64 位驱动程序,对 32 位应用程序使用 32 位驱动程序,而无需注释掉配置文件中的条目?

答案1

我突然想到:你能添加第二个条目吗:"Driver64"

/etc.odbcinst.ini 中我的配置文件中的等效部分如下所示:

cat /etc/odbcinst.ini 
[TDSdriver]
Description=only MSSQL, not for Sybase
Driver64=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup64=/usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
UsageCount=1
CPTimeout=5
CPReuse=

但我必须承认,目前我的设置并没有真正起作用,(但它曾经有效。我已经忘记了有关这些问题的许多细节)

相关内容