无法打开lib'/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so':文件未find

我正在尝试从Linux服务器访问oracle。 我正在使用unixODBC。

当我尝试访问oracle使用isql,我得到错误,驱动程序pipe理器无法打开libsqora.so.12.1。

ODBC.INI

[NAME] Application Attributes = T Attributes = W BatchAutocommitMode = IfAllSuccessful BindAsFLOAT = F CloseCursor = F DisableDPM = F DisableMTS = T Driver = Oracle 11g ODBC driver DSN = DSN_NAME EXECSchemaOpt = EXECSyntax = T Failover = T FailoverDelay = 10 FailoverRetryCount = 10 FetchBufferSize = 64000 ForceWCHAR = F Lobs = T Longs = T MaxLargeData = 0 MetadataIdDefault = F QueryTimeout = T ResultSets = T ServerName = ServerName SQLGetData extensions = F Translation DLL = Translation Option = 0 DisableRULEHint = T UserID = xxxx Password=<password> StatementCache=F CacheBufferSize=20 UseOCIDescribeAny=F 

ODBCINST.INI

  [Oracle 11g ODBC driver] Description=Oracle ODBC driver for Oracle 11g Driver=/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so FileUsage=1 

然后,当我使用isql来访问oracle我得到以下错误:

  [root@xxxxx lib]# isql -v NAME [01000][unixODBC][Driver Manager]Can't open lib '/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so' : file not found [ISQL]ERROR: Could not SQLConnect 

我在odbcinst.ini中有错字。 我已经纠正,但仍然是相同的错误。

  [root@xxxxx tmp]# isql -v NAME [01000][unixODBC][Driver Manager]Can't open lib '/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so.11.1' : file not found [ISQL]ERROR: Could not SQLConnect [root@xxxxx tmp]# ls -l /usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so.11.1 -rw-r--r-- 1 bin bin 996363 Sep 5 2010 /usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so.11.1 [Oracle 11g ODBC driver] Description=Oracle ODBC driver for Oracle 11g Driver=/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so.11.1 FileUsage=1 

ENV

  [root@xxxxx tmp]# env HOSTNAME=xxxxx SSH2_TTY=/dev/pts/0 SHELL=/bin/bash TERM=xterm HISTSIZE=1000 ODBC_DIR=/usr/local/easysoft/unixODBC OLDPWD=/usr/local/easysoft SSH_SESSION_ID=1424 SSH_TTY=/dev/pts/0 LD_LIBRARY_PATH=/usr/local/easysoft/lib:/usr/local/easysoft/unixODBC/lib A__z="*SHLVL TNS_ADMIN=/usr/local/easysoft/oracle/InstantClient112/network/ INPUTRC=/etc/inputrc PWD=/tmp LANG=en_US.UTF-8 ODBCSYSINI=/etc/ HOME=/root SHLVL=3 ODBCINI=/etc LESSOPEN=|/usr/bin/lesspipe.sh %s ORACLE_HOME=/usr/local/easysoft/oracle/InstantClient112/ G_BROKEN_FILENAMES=1 _=/bin/env PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/local/easysoft/unixODBC/bin:/opt/oraClient/11.2.0.4/bin 

修复了LD_LIBRARY_PATH更新的原始问题,但是现在,由于我尝试使用32位Oracle客户端,所以它又被打破了。

在目录/opt/oraClient/11.2.0.4_32/中安装了32位oracle客户端。

修改odbcinst.ini:

 [Oracle 11g ODBC driver] Description=Oracle ODBC driver for Oracle 11g #Driver=/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so.11.1 Driver=/opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1 FileUsage=1 

错误:

 [root@xxxxx lib]# /usr/local/bin/isql -v NAME [01000][unixODBC] [Driver Manager]Can't open lib '/opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1' : file not found [ISQL]ERROR: Could not SQLConnect 

如果我需要使用32位Oracle客户端,我在做什么错误…我知道这是环境variables的东西。

  [root@xxxxx lib]# file /opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1 /opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped 

我启用跟踪,但不能在这里附上文件。 我可以发邮件

更多debugging信息:

  [root@xxxxx bin]# ldd /opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1 ldd: warning: you do not have execution permission for `/opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1' linux-gate.so.1 => (0xffffe000) libdl.so.2 => /lib/libdl.so.2 (0xf7f2b000) libm.so.6 => /lib/libm.so.6 (0xf7f02000) libpthread.so.0 => /lib/libpthread.so.0 (0xf7ee8000) libnsl.so.1 => /lib/libnsl.so.1 (0xf7ecf000) libclntsh.so.11.1 => not found libodbcinst.so.1 => not found libc.so.6 => /lib/libc.so.6 (0xf7d71000) /lib/ld-linux.so.2 (0x00134000) 

我没有得到一个“未find”可能会导致一些问题:

  [root@xxxxx bin]# ls /opt/oraClient/11.2.0.4_32/lib/libclntsh.so.11.1 /opt/oraClient/11.2.0.4_32/lib/libclntsh.so.11.1 

以下是最新的env输出:

  [root@xxxxx]# env HOSTNAME=xxxxx SSH2_TTY=/dev/pts/0 TERM=xterm SHELL=/bin/bash HISTSIZE=1000 ODBC_DIR=/usr/local/easysoft/unixODBC SSH_TTY=/dev/pts/0 LD_LIBRARY_PATH=/opt/oraClient/11.2.0.4_32/:/opt/oraClient/11.2.0.4_32/lib/:/usr/local/easysoft/oracle/InstantClient112:/usr/local/easysoft/oracle/InstantClient112/lib/ TNS_ADMIN=/opt/oraClient/11.2.0.4_32/network/ PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/local/easysoft/unixODBC/bin:/opt/oraClient/11.2.0.4_32/bin INPUTRC=/etc/inputrc LANG=en_US.UTF-8 ODBCSYSINI=/etc/ SHLVL=4 HOME=/root ODBCINI=/etc ORACLE_HOME=/opt/oraClient/11.2.0.4_32/ G_BROKEN_FILENAMES=1 _=/bin/env 

Solutions Collecting From Web of "无法打开lib'/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so':文件未find"

这个错误是误导性的:

 The file that the error claimed was not present did exist. 

我可以通过执行以下步骤追查实际丢失的文件:

 # ldd /path/to/your/socalled/missing/file.so 

这个返回了一系列的文件,一个说:

 libodbcinst.so.2 => not found 

那是我的罪魁祸首。 然后,我创建了我需要的链接,呃,错误消失了。

ref: http : //mailman.unixodbc.org/pipermail/unixodbc-support/2011-November/003018.html

即时客户端没有lib目录。 如果你已经下载了instantclient-odbc-linux软件包,并将其解压缩到与基本软件包相同的位置,那么libsqora.so.11.1文件将在/usr/local/easysoft/oracle/InstantClient112下严格执行。

所以你的.ini应该指向:

 Driver=/usr/local/easysoft/oracle/InstantClient112/libsqora.so.11.1 

请注意扩展名; 您可能需要将其链接到libsqora.so 。 如果您在解压之后将.so文件移动到子目录(?),那么您需要:

 Driver=/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so.11.1 

看起来你已经在解压之后重新调整了即时客户端文件,创建了一个lib目录。 我不确定这是否会直接导致您的问题。 但是您也没有设置LD_LIBRARY_PATH ,如安装说明所示:

安装步骤:

  1. 为您的平台下载相应的即时客户端软件包。 所有安装需要基本包。

  2. 将这些软件包解压缩到一个单独的目录,例如“instantclient”。

  3. 将环境中的库加载路径设置为步骤2(“instantclient”)中的目录。 在许多UNIX平台上,LD_LIBRARY_PATH是适当的环境变量。 在Windows上,应该使用PATH。

  4. 开始你的申请并享受。

显然,步骤(4)还不适合你,但是我认为那是因为你还没有完成步骤(3)。 我认为当你分割文件 – 这本身可能会导致问题 – 你可能需要在LD_LIBRARY_PATH变量中包括.../InstantClient112.../InstantClient112/lib 。 并确保修改后的值已导出。 我不知道你为什么要重新排列文件。

sudo apt-get install libaio1 libaio-dev