在 AIX 中尝试动态加载 Oracle 客户端库时出错

问题描述 投票:0回答:2

我正在开发一个项目,最近我将 Oracle 客户端库的静态链接更改为动态加载库,每当它实际尝试从 OCI(Oracle 客户端库/

libclntsh.so
)调用函数时,程序将尝试
dlopen()
libclntsh.so
的绝对路径。它给了我以下错误

┌────────────────────────────────── Error ──────────────────────────────────┐ 
│                      Could not open Dynamic Library:                       │ 
│  /aix64/oracle/client/12.1.0.2/client_1/lib/libclntsh.so (8013)            │ 
│                     DLL Error : Could not load module                      │ 
│ /aix64/oracle/client/12.1.0.2/client_1/lib/libclntsh.so. (8014)            │ 
│                   Unable to load shared library (14945)                    │ 
│  ORACLE error -1012 see "ORACLE Error Messages and Codes Manual". (1252)   │ 
│                                    **                                      │ 
│              Failed to connect to ORACLE database lh. (1451)               │ 
│                                                                            │ 
│ ────────────────────────────────────────────────────────────────────────── │ 
│                                   <OK>                                     │ 
└────────────────────────────────────────────────────────────────────────────┘

PATH/LIBPATH
不可能是问题,因为我在
libclntsh.so
中给出了
dlopen()
的绝对路径。

可执行文件的权限、所有者和组是:

-rwsrwxr-x    1 root    frnd     25835393 Dec 13 19:18 /some/other/abc

在寻找解决方案时,我知道由于粘性位设置并且文件由root拥有,当我执行它时,它无法获取

LIBPATH
。 给出了库的路径,但来自同一目录的两个依赖项未加载,因此出现此错误。

任何人都可以提出建议吗?

PS:使用12.2.0.1.0 oracle库时(即LIBPATH和ORACLE_HOME指向/oracle/client/12.2.0.1.0/),加载没有问题。我不明白这是怎么发生的。

蒂亚

c oracle root aix dynamic-loading
2个回答
1
投票

您应该检查

libclntsh.so
以找出它具有哪些依赖项:
ldd libclntsh.so
dump -H -X64 libclntsh.so
都可以。

可能是

libons.so
libclntshcore.so
,具体取决于版本/变体。

另外,oracle 客户端也可以使用 dlopen 打开共享库(对于 InstantClient,它是

libociei.so

总结一下:你应该将

LIBPATH
设置为
/aix64/oracle/client/12.1.0.2/client_1/lib
,然后它可能会起作用。


0
投票

设置 uid 程序不会加载大多数 PATH 变量。

在 /etc:.kshrc 中,您可以根据需要强制加载。

https://www.ibm.com/docs/en/aix/7.1?topic=files-kshrc-file

© www.soinside.com 2019 - 2024. All rights reserved.