64位与32位应用共用/etc/odbcinst.ini的适配方案咨询
嘿,这个问题我之前帮不少开发者捋顺过——完全不用手动来回改配置文件!Linux系统本身就为32位和64位程序准备了独立的ODBC配置通道,咱们只要把对应架构的驱动分别配置到各自的配置文件里就行,具体操作看下面:
核心解决方案:利用架构独立的ODBC配置文件
Linux下32位和64位应用会读取不同路径的ODBC配置文件,咱们只需要把对应架构的驱动信息分开配置,就能实现自动适配,再也不用手动替换了。
1. 先找到对应架构的配置文件路径
首先得明确32位和64位ODBC各自的配置文件在哪,用工具就能查:
- 查64位配置路径:直接在终端运行
odbcinst -j,输出里的ODBCINSTINI字段就是64位程序读取的配置文件路径(通常是/etc/odbcinst.ini)。 - 查32位配置路径:如果是64位系统,得调用32位版本的odbcinst工具:
- Debian/Ubuntu系:运行
i386-linux-gnu-odbcinst -j - RHEL/CentOS/Fedora系:运行
lib32-odbcinst -j
输出里的ODBCINSTINI就是32位程序的配置文件路径(比如/usr/lib/i386-linux-gnu/odbcinst.ini或/usr/lib32/odbcinst.ini)。
- Debian/Ubuntu系:运行
2. 分别配置对应架构的驱动
现在把32位和64位的驱动信息分别写入各自的配置文件:
比如假设你的32位驱动路径是/usr/lib/i386-linux-gnu/libmyodbc.so,64位是/usr/lib/x86_64-linux-gnu/libmyodbc.so:
- 编辑64位配置文件(比如
/etc/odbcinst.ini),添加64位驱动条目:
[MyODBC64] Description = 我的64位ODBC驱动 Driver = /usr/lib/x86_64-linux-gnu/libmyodbc.so Setup = /usr/lib/x86_64-linux-gnu/libodbcmyS.so FileUsage = 1
- 编辑32位配置文件(比如
/usr/lib/i386-linux-gnu/odbcinst.ini),添加32位驱动条目:
[MyODBC32] Description = 我的32位ODBC驱动 Driver = /usr/lib/i386-linux-gnu/libmyodbc.so Setup = /usr/lib/i386-linux-gnu/libodbcmyS.so FileUsage = 1
3. 让程序调用对应架构的驱动
之后,你的64位程序就用驱动名称MyODBC64连接,32位程序用MyODBC32连接——各自会自动读取对应架构的配置文件,完全不用手动改来改去!
特殊情况:程序硬编码了驱动名称怎么办?
如果你的程序没法修改驱动名称(比如只能用同一个名字MyODBC),那可以用环境变量临时指定配置文件路径:
- 运行32位程序时,先设置环境变量:
ODBCINSTINI=/usr/lib/i386-linux-gnu/odbcinst.ini ./你的32位程序名 - 运行64位程序时,要么用默认配置,要么显式指定:
ODBCINSTINI=/etc/odbcinst.ini ./你的64位程序名
嫌每次输环境变量麻烦?可以写个简单的shell脚本,比如创建run_32bit_app.sh:
#!/bin/bash export ODBCINSTINI=/usr/lib/i386-linux-gnu/odbcinst.ini ./你的32位程序名
给脚本加执行权限chmod +x run_32bit_app.sh,之后直接运行脚本就行啦!
内容的提问来源于stack exchange,提问作者e271p314
相关产品推荐
相关产品推荐

