我正在尝试在 Red Hat 7 (PHP 5.6.x) 上安装 OCI8 扩展。我花了至少两天时间试图解决这个问题,包括结合 SuperUser 和 StackOverflow。到目前为止,没有一个答案可以解决问题。
我已将 Oracle Instant Client 安装在:
/usr/lib/oracle/12.1/client64/lib/
当我运行以下命令时:
pecl install oci8-2.0.10 --with-oci8=instantclient,/usr/lib/oracle/12.1/client64/lib/
它要求我提供 ORACLE_HOME 的路径。我确认该路径已定义,因此我按 Enter 继续。完成后,它会运行 make 命令并显示以下错误:
/bin/sh /var/tmp/pear-build-rootb3mVn8/oci8-2.0.10/libtool --mode=compile cc -I. -I/var/tmp/oci8 -DPHP_ATOM_INC -I/var/tmp/pear-build-rootb3mVn8/oci8-2.0.10/include -I/var/tmp/pear-build-rootb3mVn8/oci8-2.0.10/main -I/var/tmp/oci8 -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/home/oracle/oracle/product/rdbms/public -I/home/oracle/oracle/product/rdbms/demo -DHAVE_CONFIG_H -g -O2 -c /var/tmp/oci8/oci8.c -o oci8.lo
libtool: compile: cc -I. -I/var/tmp/oci8 -DPHP_ATOM_INC -I/var/tmp/pear-build-rootb3mVn8/oci8-2.0.10/include -I/var/tmp/pear-build-rootb3mVn8/oci8-2.0.10/main -I/var/tmp/oci8 -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/home/oracle/oracle/product/rdbms/public -I/home/oracle/oracle/product/rdbms/demo -DHAVE_CONFIG_H -g -O2 -c /var/tmp/oci8/oci8.c -fPIC -DPIC -o .libs/oci8.o
In file included from /var/tmp/oci8/oci8.c:48:0:
/var/tmp/oci8/php_oci8_int.h:60:17: fatal error: oci.h: No such file or directory
#include <oci.h>
^
compilation terminated.
make: *** [oci8.lo] Error 1
ERROR: `make' failed
我知道它找不到 oci.h 文件。因此我认为如果我向它提供 Oracle Instant Client 的位置,它将绕过该错误。因此在上一个请求 ORACLE_HOME 环境变量的命令中,我为其提供了以下内容:
checking Oracle ORACLE_HOME install directory... /usr/lib/oracle/12.1/client64/lib/
checking ORACLE_HOME library validity... configure: error: Expected an ORACLE_HOME top level directory but /usr/lib/oracle/12.1/client64/lib/ appears to be an Instant Client directory. Try --with-oci8=instantclient,/usr/lib/oracle/12.1/client64/lib/
ERROR: `/var/tmp/oci8/configure --with-oci8=/usr/lib/oracle/12.1/client64/lib/' failed
我不知道为什么会失败。我听说需要安装 SDK,但据我所知,当我安装即时客户端时,我也安装了 SDK。
任何帮助都将不胜感激。谢谢!
答案1
我遇到了完全相同的问题,只有一个不同,我的情况是 php54。我确实认为/希望我的解决方案也适用于您:
echo "instantclient,/usr/lib/oracle/12.1/client64/lib"|pecl install oci8-2.0.10
安装了 oci 驱动程序,没有任何问题。就我而言,由于默认的 php 版本是 5.3,因此我使用了 rh 提供的 5.4 版软件包,并且在启动 pecl 进行 oci 安装之前必须获取 /opt/rh/php54/enable。希望这对您有所帮助