LD_LIBRARY_PATH 配置设置问题

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 能够修复它。

让我知道。

谢谢!

答案1

正如@Thomas 在他的评论中所说,问题在于客户端和服务器包含一组非常相似的库,并且如果找到具有匹配名称的库,则使用它,无论它最终是否起作用。

没有办法克服这个问题,至少不是你想用的方法。没有“特定于应用程序”的方法LD_LIBRARY_PATH,所以你可能不得不坚持使用你的脚本。

答案2

LD_LIBRARY_PATH 中无法给出 2 个具有相同名称库文件的路径,系统读取顺序中第一个路径将首先被读取和使用。然而...

如果在命令前面(在同一行)使用 LD_LIBRARY_PATH=.... 调用命令,那么就可以避免需要使用脚本切换变量。

变量定义和命令之间除了一个空格之外不应该有其他分隔符,如下所示:

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

这只会为该命令的单次运行设置变量,所以您每次都必须这样做。但是,您不必再通过脚本“切换”变量。

如果您使用的是 GUI 环境,您也可以将上述内容(当然您需要修改它)放入桌面快捷方式。

相关内容