Здание проблемы cx_Oracle – libclntsh.so.11.1 => не найдено

Я пытаюсь построить cx_Oracle для установки Python 2.7.2 и Oracle 11g, но встроенный cx_Oracle.so не может найти libclntsh.so.11.1, поэтому импорт cx_Oracle в Python не удался.

/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) 

У меня есть libclntsh.so.11.1 в моей установочной директории Oracle:

 /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 

Что-то явно не так с этой настройкой?

благодаря

ОБНОВИТЬ

Мой LD_LIBRARY_PATH содержит каталог lib выше с libclntsh.so.11.1

 $ echo $LD_LIBRARY_PATH /apps/oracle/client/11.2.0.1/lib 

Это, похоже, не имеет никакого значения. Я перестрою файл cx_Oracle.so, и он все еще показывает libclntsh.so.11.1 => not found когда я запускаю $ ldd cx_Oracle.so .

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 среды LD_LIBRARY_PATH выполните команду ниже в терминале перед запуском python или добавьте его в свой .bashrc

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

Да. Вы забыли указать свой инструмент кэширования загрузчика, чтобы он выглядел в этом каталоге для библиотек. Добавьте этот каталог в /etc/ld.so.conf или аналогичный файл и запустите ldconfig .

Многие продукты oracle устанавливают oraenv. Он будет устанавливать среди других переменных среды LD_LIBRARY_PATH , поэтому рассмотрим возможность запуска . oraenv . oraenv вместо настройки среды вручную.

Установите LD_RUN_PATH . (LD_RUN_PATH используется компоновщиком, чтобы указать, где искать библиотеки только во время выполнения.)

Теперь создадим cx_Oracle.

 /mypath/cx_Oracle-5.1.1]$ export LD_RUN_PATH="/apps/oracle/client/11.2.0.1/home1/lib" /mypath/cx_Oracle-5.1.1]$ python2.7 setup.py build 

Это не потребует установки LD_LIBRARY_PATH при импорте cx_Oracle.