如何在Mac OSX Sierra安装Oracle SQLPlus 12.2并解决库问题
我在OS X Sierra上运行SQLPlus 12.2时也碰到了完全一样的dyld: Symbol not found: _ons_recvthread_config_node错误,试过官方文档的方法也没用,最后调整了环境变量和符号链接才搞定,具体步骤如下:
1. 确认Instant Client安装完整性
确保你已经下载了Instant Client Basic和Instant Client SQL*Plus两个包,解压到同一个目录(比如~/instantclient_12_2),两个包的版本必须完全一致。
2. 创建必要的符号链接
首先创建~/lib目录(如果不存在):
mkdir -p ~/lib
然后在~/lib中创建以下符号链接(替换成你的Instant Client实际路径):
ln -s ~/instantclient_12_2/libclntsh.dylib ~/lib/ ln -s ~/instantclient_12_2/libclntsh.dylib.12.1 ~/lib/ ln -s ~/instantclient_12_2/libons.dylib ~/lib/ ln -s ~/instantclient_12_2/libnnz12.dylib ~/lib/ ln -s ~/instantclient_12_2/libociei.dylib ~/lib/
3. 设置适配Sierra的环境变量
OS X Sierra的系统完整性保护(SIP)会限制DYLD_LIBRARY_PATH的作用,所以我们改用DYLD_FALLBACK_LIBRARY_PATH来确保库能被正确加载,同时配置Oracle相关的核心变量:
编辑你的shell配置文件(bash用户编辑~/.bash_profile,zsh用户编辑~/.zshrc),添加以下内容:
export ORACLE_HOME=~/instantclient_12_2 export DYLD_FALLBACK_LIBRARY_PATH=$ORACLE_HOME:~/lib:/usr/local/lib:/lib:/usr/lib export PATH=$ORACLE_HOME:$PATH
保存后,重新打开终端,或者执行以下命令让配置立即生效:
# bash用户执行 source ~/.bash_profile # zsh用户执行 source ~/.zshrc
4. 验证配置是否生效
先检查SQLPlus的依赖库路径是否正确:
otool -L $ORACLE_HOME/sqlplus
输出中所有依赖的.dylib文件都应该指向你的instantclient_12_2目录或~/lib中的链接,没有红色的"not found"提示。
再尝试启动SQLPlus:
sqlplus
如果还是报错,检查libons.dylib中的目标符号是否存在:
nm -g $ORACLE_HOME/libons.dylib | grep _ons_recvthread_config_node
如果能输出该符号,说明库本身没问题,再执行echo $DYLD_FALLBACK_LIBRARY_PATH确认环境变量是否正确加载了你的Instant Client路径。
内容的提问来源于stack exchange,提问作者user331465

