我试图为Python2.7.2和Oracle11g安装构建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 dir:
/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
这个设置明显有问题吗?
谢谢
更新
MyLD_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路径有关。由于与(corp env)合作的设置受到限制,我不得不将cx_Oracle构建为另一个用户(系统帐户)。i、 e.我在运行这个:
$ sudo -u username python27 setup.py build
因此,即使LD_LIBRARY_PATH已为我正确设置,但在以其他用户身份执行命令时,我的版本并未使用。通过将源代码移动到具有权限的位置并以用户身份运行生成,我能够成功生成。
许多oracle产品都安装oraenv。它将在其他环境变量中设置
LD_LIBRARY_PATH
,因此请考虑运行. oraenv
,而不是手动设置环境。将
/apps/oracle/client/11.2.0.1/home1/lib/
添加到LD_LIBRARY_PATH
环境变量中 在运行python之前在终端中执行下面的命令,或者将其添加到您的.bashrc
是的。您忘记告诉加载程序缓存工具它需要在该目录中查找库。将该目录添加到
/etc/ld.so.conf
或类似文件并运行ldconfig
。相关问题 更多 >
编程相关推荐