Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接到Netezza时发生RODBC错误:无法打开lib libnzodbc.so文件,未找到_R - Fatal编程技术网

连接到Netezza时发生RODBC错误:无法打开lib libnzodbc.so文件,未找到

连接到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

我无法在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:

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)