Linux系统上安装32位ODBC驱动,是很多开发者和运维人员经常遇到的需求。特别是当你的应用是32位程序,或者需要连接旧版数据库时,32位ODBC就成了绕不过去的坎。很多人在这一步栽跟头,以为装个包就行了,结果一跑就报错。其实只要搞清楚几个关键步骤,这事儿并不复杂。

32位ODBC和64位系统能兼容吗

这可能是大家最纠结的问题。Linux 64位系统完全可以安装和使用32位ODBC,但需要额外的兼容层支持。系统内核同时兼容32位和64位程序,关键在于你有没有安装对应的32位库。ODBC本身只是一个接口规范,真正干活的是底层的驱动和库文件。如果你只装了64位的libodbc,32位程序去调用肯定找不到。反过来,你就需要手动把32位的那一套东西补上。

位安装保姆级最简单三个步骤_linux安装32位odbc_车载gps汽车定位安装

以Ubuntu为例,系统默认只提供64位包。要支持32位,得先打开多架构支持。这个操作不复杂,但很多人不知道。运行dpkg --add-architecture i386,然后apt-get update,系统就知道你还需要下载32位的软件包了。CentOS那边类似,但方法不同红旗linux桌面版,后面会单独说。记住一句话:系统是64位和32位程序能不能跑是两码事。

怎么确认当前系统架构和ODBC环境

动手之前先看清楚自己站在哪块地上。跑一下uname -m,输出x86_64说明是64位系统。然后看看ODBC装没装,用odbcinst -j查看配置文件路径。如果提示命令找不到,那就是ODBC都没装。这时候别急着装32位,先把基础环境搭好。

另一个容易踩的坑是混淆了unixODBC和iodbc。大多数Linux发行版默认用unixODBC,但也有用iodbc的。两者配置方式有差异,驱动不通用。用ldd检查odbcinst的依赖库,能看出它链接的是哪个版本。32位驱动必须和对应的32位ODBC管理器配套使用,混搭会直接崩溃。装之前用apt-cache search unixodbc看看包名linux基础教程,Ubuntu上32位unixODBC叫unixodbc-dev:i386,不是unixodbc-dev。

在Ubuntu上安装32位unixODBC和驱动

Ubuntu用户安装32位ODBC的步骤很固定。先开启i386架构,然后安装32位unixODBC。安装命令是apt-get install unixodbc:i386 unixodbc-dev:i386。装完之后用odbcinst -j检查,看到的库路径应该是/usr/lib/i386-linux-gnu/,而不是/lib/x86_64-linux-gnu/。这时候32位程序就能找到ODBC管理器了。

车载gps汽车定位安装_linux安装32位odbc_位安装保姆级最简单三个步骤

下一步是装具体的数据库驱动。比如你要连MySQL,就用apt-get install libmyodbc:i386。PostgreSQL对应的是odbc-postgresql:i386。这些包装完会自动注册驱动,你可以在/etc/odbcinst.ini里看到。如果遇到找不到驱动的情况,多半是路径没配置对。手动编辑odbcinst.ini,把Driver指向具体的.so文件,记得用绝对路径。然后配odbc.ini,写上DSN名称、服务器地址、端口和数据库名,测试一下isql -v DSN_NAME,能连就说明成了。

在CentOS上安装32位ODBC驱动

CentOS用户就要稍微折腾一点。CentOS 7默认没开32位支持,需要先装glibc.i686和libstdc++.i686这些基础库。然后从EPEL仓库装unixODBC的32位版本,命令是yum install unixODBC.i686。注意CentOS的包名后面带.i686后缀,不是i386。装完之后用rpm -ql unixODBC.i686看看驱动装到哪个目录了,通常是/usr/lib/。

车载gps汽车定位安装_位安装保姆级最简单三个步骤_linux安装32位odbc

Oracle的32位ODBC驱动是另一个大坑。需要从Oracle官网下载对应的rpm包,手动强制安装。安装前先确认系统有libaio.i686和libnsl.i686。然后rpm -ivh oracle-instantclient-basic-.i686.rpm和odbc-*.i686.rpm。配好/etc/odbc.ini和/etc/odbcinst.ini后,用dltest测试驱动加载是否正常。如果报错说找不到某些so文件,用ldd检查缺失的库,一个一个补上。这个过程很磨人,但一旦配通,后面就稳了。

排查常见的32位ODBC连接错误

最典型的错误是找不到驱动或数据源。isql报错说“[01000][unixODBC][Driver Manager]Can‘t open lib…”linux安装32位odbc,那就是驱动路径不对或者依赖库缺失。用strace跟踪isql的调用,能看到它在哪个路径找.so文件。另一种情况是驱动装对了但连不上数据库,比如超时或认证失败。这时候先ping一下数据库服务器,再用telnet测试端口通不通。ODBC本身只负责翻译SQL,不负责网络连通性。

linux安装32位odbc_车载gps汽车定位安装_位安装保姆级最简单三个步骤

另一个隐蔽问题是字符集。32位驱动和64位驱动处理编码的方式可能不同,特别是连接旧版数据库时。在odbc.ini里加上Charset=UTF8或者ClientCharset=UTF8,能解决大部分乱码问题。如果还不行,考虑是不是数据库服务器端字符设置的问题。最后提醒一句,生产环境里不要轻易混用32位和64位ODBClinux安装32位odbc,容易出诡异问题。测试环境随便玩,线上要稳。

32位ODBC在Linux上的安装并不复杂,核心就三步:开多架构支持、装对应位数的unixODBC和驱动、配置正确的路径。不同发行版有各自的包管理方式,但思路一样。搞清楚系统架构和依赖关系,遇到问题用ldd和strace查,基本都能解决。希望这篇指南能帮你少走弯路,顺利搞定32位ODBC的安装。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复