You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu aarch64编译PHP OCI8扩展遇libclntsh.so不兼容错误

问题解决:编译PHP OCI8扩展时出现libclntsh.so不兼容错误

平台/PHP版本

  • Ubuntu 22.04
  • Linux内核版本:5.15.0-1013-oracle #17-Ubuntu SMP Fri Jun 24 10:14:16 UTC 2022(aarch64架构)
  • PHP 8.1.2 (cli) (NTS版本,编译于2022年6月13日)

参考文档

  • Oracle自治数据库专用版官方文档
  • Oracle Instant Client Linux下载官方文档

问题现象

编译PHP的OCI8扩展过程中,链接器输出如下错误:

/usr/bin/ld: skipping incompatible /opt/oracle/instantclient_21_7/libclntsh.so when searching for -lclntsh
/bin/bash /tmp/pear/temp/pear-build-rootJI40hE/oci8-3.2.1/libtool --mode=link cc -shared -I/tmp/pear/temp/pear-build-rootJI40hE/oci8-3.2.1/include -I/tmp/pear/temp/pear-build-rootJI40hE/oci8-3.2.1/main -I/tmp/pear/temp/oci8 -I/usr/include/php/20210902 -I/usr/include/php/20210902/main -I/usr/include/php/20210902/TSRM -I/usr/include/php/20210902/Zend -I/usr/include/php/20210902/ext -I/usr/include/php/20210902/ext/date/lib -I/opt/oracle/instantclient_21_7/sdk/include -DHAVE_CONFIG_H -g -O2 -o oci8.la -export-dynamic -avoid-version -prefer-pic -module -rpath /tmp/pear/temp/pear-build-rootJI40hE/oci8-3.2.1/modules oci8.lo oci8_lob.lo oci8_statement.lo oci8_collection.lo oci8_interface.lo oci8_failover.lo -Wl,-rpath,/opt/oracle/instantclient_21_7 -L/opt/oracle/instantclient_21_7 -lclntsh 
libtool: link: cc -shared -fPIC -DPIC .libs/oci8.o .libs/oci8_lob.o .libs/oci8_statement.o .libs/oci8_collection.o .libs/oci8_interface.o .libs/oci8_failover.o -L/opt/oracle/instantclient_21_7 -lclntsh -g -O2 -Wl,-rpath -Wl,/opt/oracle/instantclient_21_7 -Wl,-soname -Wl,oci8.so -o .libs/oci8.so 
/usr/bin/ld: skipping incompatible /opt/oracle/instantclient_21_7/libclntsh.so when searching for -lclntsh 
/usr/bin/ld: cannot find -lclntsh: No such file or directory 
/usr/bin/ld: skipping incompatible /opt/oracle/instantclient_21_7/libclntsh.so when searching for -lclntsh 
collect2: error: ld returned 1 exit status 
make: *** [Makefile:224: oci8.la] Error 1 
ERROR: make failed

链接器提示跳过不兼容的libclntsh.so库文件,最终因无法找到匹配的库导致编译失败。

问题原因

服务器为aarch64(ARM64)架构,但当前安装的Oracle Instant Client是x86-64(AMD64)版本,两者架构不匹配,链接器无法识别并使用该库文件。

解决方案

  1. 卸载现有x86-64版本的Instant Client
    删除对应目录及文件:

    sudo rm -rf /opt/oracle/instantclient_21_7
    
  2. 下载对应aarch64架构的Oracle Instant Client
    选择与系统架构匹配的Instant Client包(包含基础包、SDK包),版本需与OCI8扩展兼容(如21.7版本的aarch64包)。

  3. 安装并配置aarch64版本的Instant Client

    • 解压下载的压缩包到指定目录:
      sudo unzip instantclient-basic-linux.aarch64-21.7.0.0.0dbru.zip -d /opt/oracle/
      sudo unzip instantclient-sdk-linux.aarch64-21.7.0.0.0dbru.zip -d /opt/oracle/
      
    • 创建软链接简化路径:
      sudo ln -s /opt/oracle/instantclient_21_7 /opt/oracle/instantclient
      
    • 配置库路径环境变量:
      编辑/etc/profile.d/oracle.sh文件:
      sudo nano /etc/profile.d/oracle.sh
      
      添加以下内容:
      export LD_LIBRARY_PATH=/opt/oracle/instantclient:$LD_LIBRARY_PATH
      export ORACLE_HOME=/opt/oracle/instantclient
      
      使环境变量生效:
      source /etc/profile.d/oracle.sh
      
  4. 重新编译OCI8扩展
    重新执行安装命令,编译时指定正确的Instant Client路径:

    pecl install oci8
    

    若提示输入路径,输入/opt/oracle/instantclient即可。


内容的提问来源于stack exchange,提问作者Ahmad Asjad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:19:47