为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:Linux
【CPU】:X86
【问题描述】*:连接时报错:[unixODBC][Driver Manager] Can't open lib '/home/dmdba/dmdbms/bin/libdodbc.so' : file not found.
用ldd /home/dmdba/dmdbms/bin/libdodbc.so
看下是不是缺依赖包,缺的话,加下环境变量
[01000] 连接dm8报libdodbc.so文件没有找到
root@whx02 192.168.219.129 20:44:17 [pwd:/usr/local/etc]# isql -v dm8
[01000][unixODBC][Driver Manager]Can't open lib '/home/dmdba/dm8/dm_home/bin/libdodbc.so' : file not found
[ISQL]ERROR: Could not SQLConnect
# 查看文件,发现文件存在
root@whx02 192.168.219.129 20:44:28 [pwd:/usr/local/etc]# ll /home/dmdba/dm8/dm_home/bin/libdodbc.so
-rwxr-xr-x. 1 dmdba dinstall 191901 May 16 11:51 /home/dmdba/dm8/dm_home/bin/libdodbc.so
root@whx02 192.168.219.129 20:47:11 [pwd:/usr/local/etc]# ldd /home/dmdba/dm8/dm_home/bin/libdodbc.so
linux-vdso.so.1 => (0x00007ffd4c5e1000)
libdmdpi.so => not found
libdmfldr.so => not found
libdmelog.so => not found
libdmutl.so => not found
libdmclientlex.so => not found
libdmos.so => not found
libdmcvt.so => not found
libdmstrt.so => not found
librt.so.1 => /lib64/librt.so.1 (0x00007f136dceb000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f136dacf000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f136d8cb000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f136d5c3000)
libm.so.6 => /lib64/libm.so.6 (0x00007f136d2c1000)
libc.so.6 => /lib64/libc.so.6 (0x00007f136cef3000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f136ccdd000)
/lib64/ld-linux-x86-64.so.2 (0x00007f136e11f000)
可能的原因:
● 这要看/home/dmdba/bash_profile中关于$DM_HOME的配置,如果有多个重复配置就会报错
● 如果使用非dmdba用户加载不到/home/dmdba/.bash_profile中关于$DM_HOME的配置也会报错
# 切换到dmdba用户在查看
dmdba@whx02 192.168.219.129 20:51:00 [pwd:~]$ ldd /home/dmdba/dm8/dm_home/bin/libdodbc.so
linux-vdso.so.1 => (0x00007ffcb67c5000)
libdmdpi.so => /home/dmdba/dm8/dm_home/bin/libdmdpi.so (0x00007fa1939d7000)
libdmfldr.so => /home/dmdba/dm8/dm_home/bin/libdmfldr.so (0x00007fa192d99000)
libdmelog.so => /home/dmdba/dm8/dm_home/bin/libdmelog.so (0x00007fa192b92000)
libdmutl.so => /home/dmdba/dm8/dm_home/bin/libdmutl.so (0x00007fa192980000)
libdmclientlex.so => /home/dmdba/dm8/dm_home/bin/libdmclientlex.so (0x00007fa19272d000)
libdmos.so => /home/dmdba/dm8/dm_home/bin/libdmos.so (0x00007fa192501000)
libdmcvt.so => /home/dmdba/dm8/dm_home/bin/libdmcvt.so (0x00007fa191e22000)
libdmstrt.so => /home/dmdba/dm8/dm_home/bin/libdmstrt.so (0x00007fa191c0e000)
librt.so.1 => /lib64/librt.so.1 (0x00007fa191a06000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa1917ea000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fa1915e6000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fa1912de000)
libm.so.6 => /lib64/libm.so.6 (0x00007fa190fdc000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa190c0e000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fa1909f8000)
libdmmem.so => /home/dmdba/dm8/dm_home/bin/libdmmem.so (0x00007fa1907eb000)
libdmcalc.so => /home/dmdba/dm8/dm_home/bin/libdmcalc.so (0x00007fa190571000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa194880000)
你的应用程序报错想来原理类似,你试试把DM的环境变量配置到应用用户下,注意调整权限问题,再试试看吧,包括DM_HOME、LD_LIBRARY_PATH、PATH
1.看一下odbcinst.ini配置文件驱动路径与应用报错路径是否一致
2.查看一下libdodbc.so是否缺依赖
3.将动态库添加到环境变量里面试试