python - 问题构建 cx_Oracle - libclntsh.so.11.1 => 未找到

标签 python oracle build cx-oracle

我正在尝试为 Python 2.7.2 和 Oracle 11g 安装构建 cx_Oracle,但构建的 cx_Oracle.so 找不到 libclntsh.so.11.1,因此在 Python 中导入 cx_Oracle 失败。

/mypath/cx_Oracle-5.1.1/build/lib.linux-x86_64-2.7-11g]$ ldd cx_Oracle.so
    libclntsh.so.11.1 => not found
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ae9be290000)
    libc.so.6 => /lib64/libc.so.6 (0x00002ae9be4ab000)
    /lib64/ld-linux-x86-64.so.2 (0x000000389b600000)

我的 Oracle 客户端安装目录中有 libclntsh.so.11.1:

/apps/oracle/client/11.2.0.1/home1/lib]$ ls -l libclntsh.so*
libclntsh.so -> /apps/oracle/client/11.2.0.1/home1/lib/libclntsh.so.11.1
libclntsh.so.11.1

cx_Oracle setup.py 正在挑选这个 lib 目录:

/mypath/cx_Oracle-5.1.1]$ python2.7 setup.py build
/apps/oracle/client/11.2.0.1/home1/
running build
running build_ext
building 'cx_Oracle' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/apps/oracle/client/11.2.0.1/home1/rdbms/demo -I/apps/oracle/client/11.2.0.1/home1/rdbms/public -I/apps/bweb/python-2.7.2/include/python2.7 -c cx_Oracle.c -o build/temp.linux-x86_64-2.7-11g/cx_Oracle.o -DBUILD_VERSION=5.1.1
In file included from /apps/oracle/client/11.2.0.1/home1/rdbms/public/oci.h:3024,
                 from cx_Oracle.c:10:
/apps/oracle/client/11.2.0.1/home1/rdbms/public/ociap.h:10788: warning: function declaration isn't a prototype
/apps/oracle/client/11.2.0.1/home1/rdbms/public/ociap.h:10794: warning: function declaration isn't a prototype
gcc -pthread -shared build/temp.linux-x86_64-2.7-11g/cx_Oracle.o -L/apps/oracle/client/11.2.0.1/home1/lib -lclntsh -o build/lib.linux-x86_64-2.7-11g/cx_Oracle.so

这个设置明显有问题吗?

谢谢

更新

我的 LD_LIBRARY_PATH 包含上面带有 libclntsh.so.11.1

的 lib 目录
$ echo $LD_LIBRARY_PATH
/apps/oracle/client/11.2.0.1/lib

这似乎没有任何区别。我重建了 cx_Oracle.so 文件,当我运行 $ ldd cx_Oracle.so 时,它仍然显示 libclntsh.so.11.1 => not found

Python 无法加载构建的模块:

Python 2.7.2 (default, Jan 19 2012, 14:38:32)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory

已解决

问题与 LD_LIBRARY_PATH 环境变量有关。由于我正在使用的设置的限制(corp env),我不得不将 cx_Oracle 构建为另一个用户(系统帐户)。即我正在运行这个:

$ sudo -u username python27 setup.py build

因此,即使 LD_LIBRARY_PATH 已为我正确设置,但在以其他用户身份执行命令时并未使用我的版本。通过将源代码移动到我有权限的位置并以我的用户身份运行构建,我能够成功构建。

最佳答案

/apps/oracle/client/11.2.0.1/home1/lib/ 添加到您的 LD_LIBRARY_PATH 环境变量中 在运行 python 之前在终端中执行以下命令或将其添加到您的 .bashrc

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/apps/oracle/client/11.2.0.1/home1/lib/

关于python - 问题构建 cx_Oracle - libclntsh.so.11.1 => 未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11654090/

相关文章:

python - Python中的简单素数生成器

python - 如何设置 PIL 加载的默认字体的大小,使其适合我的 8x8 矩阵?

sql - 添加日期不超过一个月

oracle - 使用一对分隔符 * 和元素分隔符 | 交换 Oracle 记录内的字段

ios - 我什么时候可以安全地删除 Xcode DerivedData 文件夹?

python - 使用 Python/PhantomJS/Selenium 滚动无限页面

python - 为什么在禁用 CPython 垃圾收集器时调用析构函数?

oracle - 表正在发生变化,触发器/函数可能看不到它 ORA-06512

c# - Visual Studio 开始构建前的漫长等待

go - 端到端 GoLang 构建管道示例