连接到Netezza时发生RODBC错误:无法打开lib libnzodbc.so文件,未找到
我无法在R命令行或Rstudio中连接到Netezza设备。但是,我能够使用isql和nzodbcsql命令行工具连接到设备 以下是我目前在Redhat Linux中的配置: 1.已安装unixODBC管理器 2.用户环境变量: LD_LIBRARY_PATH=/usr/local/nz/lib64,其中存在Netezza库。目录的权限为755 NZ_ODBC_INI_PATH=/common/ODBC,ODBC配置文件所在的位置。此位置的权限也为755。 3.运行odbcinst-j以检查ODBC文件的配置: 能够使用isql和nzodbcsql查询Netezza select*from\u v\u dual将返回1条记录。让我们假设ODBC DNS名称为testdsn 试图在R会话中使用RODBC:连接到Netezza时发生RODBC错误:无法打开lib libnzodbc.so文件,未找到,r,R,我无法在R命令行或Rstudio中连接到Netezza设备。但是,我能够使用isql和nzodbcsql命令行工具连接到设备 以下是我目前在Redhat Linux中的配置: 1.已安装unixODBC管理器 2.用户环境变量: LD_LIBRARY_PATH=/usr/local/nz/lib64,其中存在Netezza库。目录的权限为755 NZ_ODBC_INI_PATH=/common/ODBC,ODBC配置文件所在的位置。此位置的权限也为755。 3.运行odbcinst-j以检查OD
library(RODBC)
z = odbcConnect("testdsn")
Warning messages:
1: In RODBC::odbcDriverConnect("DSN=testdsn") :
[RODBC] ERROR: state 01000, code 0, message [unixODBC][Driver Manager]Can't open lib '/usr/local/nz/lib64/libnzodbc.so' : file not found
2: In RODBC::odbcDriverConnect("DSN=testdsn") :
ODBC connection failed
此错误通常表示LD_LIBRARY_路径设置不正确。我知道虽然我在命令行上设置了它,但它并没有为R设置,所以我在Renviron.site配置文件中设置了它
我还在libnzobc.so文件上运行了ldd,没有发现任何链接问题:
system("ldd /usr/local/nz/lib64/libnzodbc.so")
linux-vdso.so.1 => (0x00007fff1fdce000)
libc.so.6 => /lib64/libc.so.6 (0x00007f26ede93000)
libm.so.6 => /lib64/libm.so.6 (0x00007f26edb91000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f26ed975000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f26ed771000)
libkrb5.so.3 => /usr/local/nz/lib64/libkrb5.so.3 (0x00007f26ee58a000)
libkrb5support.so.0 => /usr/local/nz/lib64/libkrb5support.so.0 (0x00007f26ed664000)
libcom_err.so.3 => /usr/local/nz/lib64/libcom_err.so.3 (0x00007f26ed561000)
libk5crypto.so.3 => /usr/local/nz/lib64/libk5crypto.so.3 (0x00007f26ed41e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f26ee54c000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f26ed205000)
我可以通过unixODBC和Netezza命令行工具进行查询,但不能通过R或Rstudio进行查询。据我所知,我已经正确设置了R环境变量来查找库路径,但它仍然找不到文件。有人知道我还缺什么吗
R版本:3.4.4
Netezza驱动程序版本:3.51
Rehat版本:7.6我想出了如何让它工作的方法。出于某种原因,R似乎忽略了LD_LIBRARY_PATH中的条目。相反,我使用ldconfig添加了库位置。一旦它被添加到那里并通过运行ldconfig-p进行验证,我就能够在R中查询
Sys.getenv("LD_LIBRARY_PATH")
[1] "/lib64:/usr/include:/usr/lib64:/usr/local/nz/lib64"
system("ldd /usr/local/nz/lib64/libnzodbc.so")
linux-vdso.so.1 => (0x00007fff1fdce000)
libc.so.6 => /lib64/libc.so.6 (0x00007f26ede93000)
libm.so.6 => /lib64/libm.so.6 (0x00007f26edb91000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f26ed975000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f26ed771000)
libkrb5.so.3 => /usr/local/nz/lib64/libkrb5.so.3 (0x00007f26ee58a000)
libkrb5support.so.0 => /usr/local/nz/lib64/libkrb5support.so.0 (0x00007f26ed664000)
libcom_err.so.3 => /usr/local/nz/lib64/libcom_err.so.3 (0x00007f26ed561000)
libk5crypto.so.3 => /usr/local/nz/lib64/libk5crypto.so.3 (0x00007f26ed41e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f26ee54c000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f26ed205000)