Я столкнулся со странной, но разумной проблемой: у меня есть 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
, так что вам, вероятно, придется придерживаться своего сценария.