我正在使用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文件OS ABI无效“
我实际上甚至从“libstdc ++ - libc6.2-2.so.3”到“libstdc ++。so”创建了一个符号链接,但即使它通过ldd解决了这个问题,当我查询isql时它也导致了这个错误。
isql:符号查找错误:/usr/dlc/odbc/lib/pgoe1023.so:undefined 符号:__ builtin_vec_new
我从来没有在* nix的盒子上安装odbc,但是我们在windows盒子上做了同样的事情并且工作正常。任何意见都赞赏。
答案 0 :(得分:14)
检查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,反之亦然。答案 1 :(得分:2)
要检查的一件事是驱动程序链接的unixODBC库的次要版本号。从unixODBC 2.3.1开始,我将次要lib编号更改为2,以反映64位平台上SQLLEN大小的变化。但是,如果驱动程序lib与早期版本链接,则它将查找libodbc.so.1,并且当前源提供libodbc.so.2。简单的解决方案是提供从* .so.1到* .so.2的sym链接。 libodbcinst.so也是如此,所以也要检查一下。