【发布时间】:2019-05-15 14:47:37
【问题描述】:
我正在做一个项目,最近我将 oracle 客户端库的静态链接更改为库的动态加载,只要它实际尝试从 OCI 调用函数(Oracle 客户端库/libclntsh.so),程序将尝试@987654322 @ 带有到 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 不是问题,因为我在dlopen() 中为libclntsh.so 提供了绝对路径。
可执行文件的权限、所有者和组是:-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/),加载没有问题。我不明白这是怎么回事。
TIA
【问题讨论】:
标签: c oracle root aix dynamic-loading