Monterey macOS+Python3.10使用ibm_db库遇Symbol not found错误求助
问题:macOS Monterey + Python 3.10 运行ibm_db代码报错
环境信息
- 系统版本:macOS Monterey
- Python版本:3.10
运行代码
from ibm_db import connect from ibm_db import fetch_assoc from ibm_db import tables connection = connect('DATABASE=<DATABASE>;' 'HOSTNAME=<HOSTNAME>;' 'PORT=<PORT>;' 'PROTOCOL=<PROTOCOL>;' 'UID=<UID>;' 'PWD=<PWD>;', '', '')
报错信息
ImportError: dlopen(../lib/python3.10/site-packages/ibm_db.cpython-310-darwin.so, 0x0002): Symbol not found: (___cxa_throw_bad_array_new_length) Referenced from: '../lib/python3.10/site-packages/clidriver/lib/libdb2.dylib' Expected in: '/usr/lib/libstdc++.6.dylib'
已尝试的无效方案
- 执行环境变量设置:
export DYLD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/clidriver/lib,无效果 - 曾考虑将
libstdc++.6.0.9.dylib放入/usr/lib目录,但因系统权限限制无法操作
可行解决方案
方法1:使用conda环境(推荐)
- 创建并激活Python 3.10专属环境:
conda create -n ibm_db_env python=3.10 conda activate ibm_db_env - 在环境内安装ibm_db:
pip install ibm_db
conda环境会自带兼容的libstdc++库,完全避开系统库的权限与版本冲突问题。
方法2:改用DYLD_FALLBACK_LIBRARY_PATH指定库路径
macOS Monterey对DYLD_LIBRARY_PATH有严格限制,改用DYLD_FALLBACK_LIBRARY_PATH更有效:
- 运行脚本前执行以下命令:
export DYLD_FALLBACK_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/clidriver/lib:$DYLD_FALLBACK_LIBRARY_PATH - 再执行你的Python脚本
方法3:复制库到用户有权限的目录
- 创建用户专属库目录:
mkdir -p ~/lib - 复制clidriver中的libstdc++库到该目录:
cp /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/clidriver/lib/libstdc++.6.dylib ~/lib/ - 运行脚本前设置路径:
export DYLD_FALLBACK_LIBRARY_PATH=~/lib:$DYLD_FALLBACK_LIBRARY_PATH - 执行Python脚本
内容的提问来源于stack exchange,提问作者gd1
相关产品推荐
相关产品推荐

