Назад | Перейти на главную страницу

LD_LIBRARY_PATH Проблемы настройки конфигурации

Я столкнулся со странной, но разумной проблемой: у меня есть 2 ORACLE_HOME, первый указывает на программное обеспечение базы данных ORACLE, а второй указывает на клиентское программное обеспечение ORACLE.

Почему я вынужден это сделать - причина такова: в моей системе Pro * c компилируется из базы данных ORACLE ORACLE_HOME, однако Pro * Cobol компилируется из клиента ORACLE ORACLE_HOME.

Чтобы скомпилировать Pro * Cobol:

echo $LD_LIBRARY_PATH
/u01/app/oracle/product/11.2.0/client/lib:/opt/FJSVcbl64/lib:/opt/FJSVXbsrt/lib:/opt/FJSVXmeft/lib:/opt/FJSVcbl/COBOL/lib:/opt/FJSVcbl/COBOLRT/lib

Для компиляции Pro * C

echo $LD_LIBRARY_PATH
/u01/app/oracle/product/11.2.0/db_1/lib:/opt/FJSVcbl64/lib:/opt/FJSVXbsrt/lib:/opt/FJSVXmeft/lib:/opt/FJSVcbl/COBOL/lib:/opt/FJSVcbl/COBOLRT/lib

Если я помещу оба пути, т.е. /u01/app/oracle/product/11.2.0/db_1/lib и /u01/app/oracle/product/11.2.0/client/lib в 1 LD_LIBRARY_PATH, будет получено только то, что наступит раньше. успешно.

Есть ли способ исправить эту проблему?

Для временного исправления я создал 2 небольших скрипта с разными LD_LIBRARY_PATH в каждом файле; поэтому я вызываю этот сценарий перед компиляцией Pr * C или Pro * Cobol.

Я просто не хочу вызывать какой-либо сценарий, и только 1 LD _LIBRARY_PATH должен иметь возможность исправить это.

Дай мне знать.

Спасибо!

Невозможно указать 2 пути, которые содержат файлы библиотеки с одинаковыми именами в LD_LIBRARY_PATH, первый в порядке чтения для системы будет прочитан и использован первым. ТЕМ НЕ МЕНИЕ...

Если вы вызываете свою команду с LD_LIBRARY_PATH = .... перед командой (в той же строке), тогда вам может не потребоваться, чтобы сценарий переключал переменные.

Между определением переменной и командой не должно быть никаких разделителей, кроме одного пробела, например:

LD_LIBRARY_PATH=/usr/local/lib64:${LD_LIBRARY_PATH} /path/to/your/command

Это устанавливает переменную только для этого единственного запуска команды, так что да, вам придется делать это каждый раз. Однако вам больше не нужно «переключать» переменную с помощью сценария.

Вы можете поместить вышеуказанное (вам, конечно же, нужно будет изменить) в ярлык на рабочем столе, также если вы используете среду графического интерфейса.

Как сказал @Thomas в своем комментарии, проблема в том, что клиент и сервер содержат очень похожий набор библиотек, и если библиотека с совпадающим именем найдена, она используется, независимо от того, работает она в конце или нет.

Невозможно преодолеть это, по крайней мере, так, как вы намереваетесь. Нет "специфичного для приложения" LD_LIBRARY_PATH, так что вам, вероятно, придется придерживаться своего сценария.