【问题标题】:unixodbc driver manager cannot open specified library on installunixodbc 驱动程序管理器无法在安装时打开指定的库
【发布时间】:2012-05-06 07:16:09
【问题描述】:

我正在使用 ArchLinux,我正在尝试安装 OpenEdge 进度驱动程序,以便我可以通过 PHP 访问它。我已经安装了 unixodbc 包和驱动程序,但是当我通过 isql 或 PHP 测试连接时,我得到了同样的错误...

# isql -3 SUBS2A
[01000][unixODBC][Driver Manager]Can't open lib '/usr/dlc/odbc/lib/pgoe1023.so' : file not found
[ISQL]ERROR: Could not SQLConnect

搞砸的是“/usr/dlc/odbc/lib/pgoe1023.so”目前存在,我什至从“/usr/dlc”符号链接它。

以下是我的 .ini 文件...

odbc.ini

[SUBS2A]
Description = ODBC Driver for Progress
Driver = /usr/dlc/odbc/lib/pgoe1023.so
FileUsage = 1

odbcinst.ini(我删除了一些不相关的凭据)

[ODBC-test]
Description = SUBS2A
Driver = SUBS2A
Server = 192.168.1.2
Port = 4000
APILevel=1
ConnectFunctions=YYN
CPTimeout=60
DriverODBCVer=03.60
FileUsage=0
SQLLevel=0
UsageCount=1
ArraySize=50
DefaultLongDataBuffLen=2048
DefaultIsolationLevel= READ COMMITTED
StaticCursorLongColBuffLen=4096

编辑添加更多信息...

它们似乎都是 32 位的,但我不知道我在做什么。

[root@Crux etc]# file /usr/bin/isql
/usr/bin/isql: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.27, BuildID[sha1]=0xd1bc16c119                          bb5cad6fea9e2a9abc1d06794a2775, stripped
[root@Crux etc]# file /usr/dlc/odbc/lib/pgoe1023.so
/usr/dlc/odbc/lib/pgoe1023.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped

它似乎确实缺少一些依赖项......

[root@Crux lib]# ldd pgoe1023.so
        linux-gate.so.1 =>  (0xb77c2000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb7499000)
        librt.so.1 => /lib/librt.so.1 (0xb7490000)
        libpgicu23.so => not found
        libdl.so.2 => /lib/libdl.so.2 (0xb748b000)
        libstdc++-libc6.2-2.so.3 => not found
        libm.so.6 => /lib/libm.so.6 (0xb745e000)
        libc.so.6 => /lib/libc.so.6 (0xb72bc000)
        /lib/ld-linux.so.2 (0xb77c3000)

更新

我将“libpgicu23.so”复制到/usr/lib,它解决了这个问题,但我仍然需要“libstdc++-libc6.2-2.so.3”,但是当我从互联网上抓取一个时,它说“加载共享库时出错:/usr/lib/libstdc++-libc6.2-2.so.3: ELF file OS ABI invalid"

实际上我什至做了一个从“libstdc++-libc6.2-2.so.3”到“libstdc++.so”的符号链接,但是即使它通过ldd解决了问题,当我查询isql时它也导致了这个错误。

isql:符号查找错误:/usr/dlc/odbc/lib/pgoe1023.so:未定义 符号:__builtin_vec_new

我从来没有在 *nix 机器上安装过 odbc,但我们在 windows 机器上做了同样的事情,而且效果很好。任何意见表示赞赏。

【问题讨论】:

    标签: odbc archlinux unixodbc openedge progress-db


    【解决方案1】:

    检查 unixODBC 和您的驱动程序是否具有相同的架构,即运行:

    which isql
    file xxx (whatever came back from above)
    file /usr/dlc/odbc/lib/pgoe1023.so
    

    它们都应该是 32 位或 64 位。 64 位 unixODBC 不能使用 32 位驱动程序,反之亦然。

    你不应该需要那个符号链接。

    在 /usr/dlc/odbc/lib/pgoe1023.so 上运行 ldd 以确保找到所有依赖项。

    检查 /usr/dlc/odbc/lib/pgoe1023.so 是否可执行。

    顺便说一句,我认为您的标签弄错了,因为您的 odbc.ini 文件内容应该是 odbcinst.ini,反之亦然。

    【讨论】:

    • 好的,我对我的问题进行了编辑,提供了更多信息。这很奇怪,因为我实际上确实有反向的 ini 文件,但是当我反转它们时,错误变得更糟(说它找不到 DSN/驱动程序)。但是,当我运行 ldd 时,我得到了一些缺少的依赖项,所以我将尝试修复它,我发现一些我认为可能会有所帮助的东西:remidian.com/progress/…
    • 通常情况下,您将 ini 文件以错误的方式处理是没有任何意义的,但由于 unixODBC 允许您指定 driver = XXX 其中 XXX 是 odbcint.ini 中的条目或 Driver=path_to_shared_object 你侥幸逃脱。事实上,一切都是 32 位操作系统,但是,你是你缺少的依赖,你不能做你所做的并期望它工作。 ABI 无效表明您安装了不兼容的共享对象。没那么简单。
    【解决方案2】:

    要检查的一点是驱动程序所链接的 unixODBC 库的次要版本号。从 unixODBC 2.3.1 开始,我将次要库编号更改为 2,以反映 64 位平台上 SQLLEN 大小的变化。但是,如果驱动程序库与早期版本链接,它将寻找 libodbc.so.1,而当前来源提供 libodbc.so.2。简单的解决方案是提供从 *.so.1 到 *.so.2 的符号链接。 libodbcinst.so 也是如此,所以也要检查一下。

    【讨论】:

      猜你喜欢
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 2021-05-15
      相关资源
      最近更新 更多