Я работаю над проектом, и недавно я изменил статическое связывание клиентской библиотеки 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/), нет проблем с загрузкой.Я не понимаю, как это происходит.
TIA