为了这个错误编译了好几个小时。
原由是因为我在服务器上安装了oracle18c的服务器程序,肯定就设置了$ORACLE_HOME等变量。
编译Oci的时候,php默认就是用这个编译了,然后连接oracle报错如标题。
这里有个技巧就是在Phpinfo中可以看到oci编译使用的oracle_home,如下:
Compile-time ORACLE_HOME /usr/lib/oracle/12.2/client64 Libraries Used -Wl,-rpath,/usr/lib/oracle/12.2/client64/lib -L/usr/lib/oracle/12.2/client64/lib -lclntsh
最后发现在Oci8编译的时候是可以指定oci环境的。
./configure --with-php-config=/usr/local/php/bin/php-config --with-oci8=/usr/lib/oracle/12.2/client64
还是需要像平时那样安装oracle_client的,oracle_client默认安装在
/usr/lib/oracle/12.2/client64
但是,怪就怪在有些基础文件是在/usr/include/oracle/12.2/client64路径中,如果编译OCI8的时候指定Oci路径,会报错./oci.h:656:23: fatal error: oratypes.h: No such file or directory
而这些h文件,全部在/usr/include/oracle/12.2/client64下面最后,采取一个最二的措施,把这些.h文件,全部复制到oci8目录下去,编译通过。
------------正 文 已 结 束, 感 谢 您 的 阅 读 (折雨的天空)--------------------
转载请注明本文标题和链接:《oci_connect(): OCIEnvNlsCreate() failed》
发表评论