Не удается установить DBD::Oracle на macOS Big Sur => зависимая dylib '@rpath/libclntsh.dylib.19.1' не найдена

Я не могу собрать и установить Oracle Instant Client 19.8 в macOS Big Sur 11.2.1. Я получаю следующую ошибку:

Error:  Can't load '/Users/x/.cpanm/work/1613898291.17798/DBD-Oracle-1.80/blib/arch/auto/DBD/Oracle/Oracle.bundle' for module DBD::Oracle: dlopen(/Users/x/.cpanm/work/1613898291.17798/DBD-Oracle-1.80/blib/arch/auto/DBD/Oracle/Oracle.bundle, 0x0002): dependent dylib '@rpath/libclntsh.dylib.19.1' not found for '/Users/x/.cpanm/work/1613898291.17798/DBD-Oracle-1.80/blib/arch/auto/DBD/Oracle/Oracle.bundle'. relative file paths not allowed '@rpath/libclntsh.dylib.19.1' at /System/Library/Perl/5.28/darwin-thread-multi-2level/DynaLoader.pm line 197.

Похоже, что Big Sur не передает переменную среды DYLD_LIBRARY_PATH в подоболочки:

Your DYLD_LIBRARY_PATH env var is set to ''
WARNING: Your DYLD_LIBRARY_PATH env var doesn't include '/opt/instantclient
% cpanm DBD::Oracle
--> Working on DBD::Oracle
Fetching http://www.cpan.org/authors/id/M/MJ/MJEVANS/DBD-Oracle-1.80.tar.gz ... OK
==> Found dependencies: Test::NoWarnings
--> Working on Test::NoWarnings
Fetching http://www.cpan.org/authors/id/A/AD/ADAMK/Test-NoWarnings-1.04.tar.gz ... OK
Configuring Test-NoWarnings-1.04 ... OK
Building and testing Test-NoWarnings-1.04 ... OK
Successfully installed Test-NoWarnings-1.04
Configuring DBD-Oracle-1.80 ... OK
Building and testing DBD-Oracle-1.80 ... FAIL
! Installing DBD::Oracle failed. See /Users/x/.cpanm/work/1613898291.17798/build.log for details. Retry with --force to force install it.
1 distribution installed
8' but probably needs to.

Я пытался:

  • Установка по по умолчанию: ~/Downloads/instantclient
    % cpanm DBD::Oracle
    --> Working on DBD::Oracle
    Fetching http://www.cpan.org/authors/id/M/MJ/MJEVANS/DBD-Oracle-1.80.tar.gz ... OK
    ==> Found dependencies: Test::NoWarnings
    --> Working on Test::NoWarnings
    Fetching http://www.cpan.org/authors/id/A/AD/ADAMK/Test-NoWarnings-1.04.tar.gz ... OK
    Configuring Test-NoWarnings-1.04 ... OK
    Building and testing Test-NoWarnings-1.04 ... OK
    Successfully installed Test-NoWarnings-1.04
    Configuring DBD-Oracle-1.80 ... OK
    Building and testing DBD-Oracle-1.80 ... FAIL
    ! Installing DBD::Oracle failed. See /Users/x/.cpanm/work/1613898291.17798/build.log for details. Retry with --force to force install it.
    1 distribution installed
    
    8
  • Установка в ~/lib или /usr/local/lib
  • Замена символических ссылок абсолютными путями
  • Использование install_name_tool для изменения идентификатора и изменения @rpath, но получено warning: changes being made to the file will invalidate the code signature

но я не могу понять это. Ваша помощь очень ценится. Для повторного производства:

  1. Установите Oracle Instant Client 19.8 на /opt/instantclient

    % cpanm DBD::Oracle
    --> Working on DBD::Oracle
    Fetching http://www.cpan.org/authors/id/M/MJ/MJEVANS/DBD-Oracle-1.80.tar.gz ... OK
    ==> Found dependencies: Test::NoWarnings
    --> Working on Test::NoWarnings
    Fetching http://www.cpan.org/authors/id/A/AD/ADAMK/Test-NoWarnings-1.04.tar.gz ... OK
    Configuring Test-NoWarnings-1.04 ... OK
    Building and testing Test-NoWarnings-1.04 ... OK
    Successfully installed Test-NoWarnings-1.04
    Configuring DBD-Oracle-1.80 ... OK
    Building and testing DBD-Oracle-1.80 ... FAIL
    ! Installing DBD::Oracle failed. See /Users/x/.cpanm/work/1613898291.17798/build.log for details. Retry with --force to force install it.
    1 distribution installed
    
    8

  2. macOS Big Sur, установите необходимые переменные среды.

% uname -v
Darwin Kernel Version 20.3.0: Thu Jan 21 00:07:06 PST 2021; root:xnu-7195.81.3~1/RELEASE_X86_64
% echo $DYLD_LIBRARY_PATH
/opt/instantclient
% cpanm DBD::Oracle
--> Working on DBD::Oracle
Fetching http://www.cpan.org/authors/id/M/MJ/MJEVANS/DBD-Oracle-1.80.tar.gz ... OK
==> Found dependencies: Test::NoWarnings
--> Working on Test::NoWarnings
Fetching http://www.cpan.org/authors/id/A/AD/ADAMK/Test-NoWarnings-1.04.tar.gz ... OK
Configuring Test-NoWarnings-1.04 ... OK
Building and testing Test-NoWarnings-1.04 ... OK
Successfully installed Test-NoWarnings-1.04
Configuring DBD-Oracle-1.80 ... OK
Building and testing DBD-Oracle-1.80 ... FAIL
! Installing DBD::Oracle failed. See /Users/x/.cpanm/work/1613898291.17798/build.log for details. Retry with --force to force install it.
1 distribution installed
8 % env | grep -E 'PERL|ORACLE|DYLD' PERL_LOCAL_LIB_ROOT=/Users/x/.perl5 PERL_MB_OPT=--install_base /Users/x/.perl5 PERL_MM_OPT=INSTALL_BASE=/Users/x/.perl5 PERL5LIB=/Users/x/.perl5/lib/perl5 ORACLE_HOME=/opt/instantclient
% cpanm DBD::Oracle
--> Working on DBD::Oracle
Fetching http://www.cpan.org/authors/id/M/MJ/MJEVANS/DBD-Oracle-1.80.tar.gz ... OK
==> Found dependencies: Test::NoWarnings
--> Working on Test::NoWarnings
Fetching http://www.cpan.org/authors/id/A/AD/ADAMK/Test-NoWarnings-1.04.tar.gz ... OK
Configuring Test-NoWarnings-1.04 ... OK
Building and testing Test-NoWarnings-1.04 ... OK
Successfully installed Test-NoWarnings-1.04
Configuring DBD-Oracle-1.80 ... OK
Building and testing DBD-Oracle-1.80 ... FAIL
! Installing DBD::Oracle failed. See /Users/x/.cpanm/work/1613898291.17798/build.log for details. Retry with --force to force install it.
1 distribution installed
8

и это моя первая проблема там. DYLD_LIBRARY_PATH очищается.

  1. Установите cpanm в ~/.perl5
% curl -fsSL http://cpanmin.us | perl - -l ~/.perl5 App::cpanminus local::lib
--> Working on App::cpanminus
Fetching http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz ... OK
Configuring App-cpanminus-1.7044 ... OK
Building and testing App-cpanminus-1.7044 ... OK
Successfully installed App-cpanminus-1.7044
--> Working on local::lib
Fetching http://www.cpan.org/authors/id/H/HA/HAARG/local-lib-2.000024.tar.gz ... OK
Configuring local-lib-2.000024 ... OK
Building and testing local-lib-2.000024 ... OK
Successfully installed local-lib-2.000024
2 distributions installed
  1. Принудительно установите DBI, чтобы избежать конфликтов со встроенной версией:
% cpanm DBI
DBI is up to date. (1.643)
% cpanm DBI --force
--> Working on DBI
Fetching http://www.cpan.org/authors/id/T/TI/TIMB/DBI-1.643.tar.gz ... OK
Configuring DBI-1.643 ... OK
Building and testing DBI-1.643 ... FAIL
! Testing DBI-1.643 failed but installing it anyway.
Successfully reinstalled DBI-1.643
1 distribution installed
  1. Установить DBD::Oracle - всегда не получается.
% cpanm DBD::Oracle
--> Working on DBD::Oracle
Fetching http://www.cpan.org/authors/id/M/MJ/MJEVANS/DBD-Oracle-1.80.tar.gz ... OK
==> Found dependencies: Test::NoWarnings
--> Working on Test::NoWarnings
Fetching http://www.cpan.org/authors/id/A/AD/ADAMK/Test-NoWarnings-1.04.tar.gz ... OK
Configuring Test-NoWarnings-1.04 ... OK
Building and testing Test-NoWarnings-1.04 ... OK
Successfully installed Test-NoWarnings-1.04
Configuring DBD-Oracle-1.80 ... OK
Building and testing DBD-Oracle-1.80 ... FAIL
! Installing DBD::Oracle failed. See /Users/x/.cpanm/work/1613898291.17798/build.log for details. Retry with --force to force install it.
1 distribution installed

person h q    schedule 21.02.2021    source источник
comment
Спасибо @HåkonHægland. Я это понимаю, но что я могу с этим поделать?   -  person h q    schedule 21.02.2021
comment
Попробуйте запустить тесты напрямую (а не косвенно с помощью make test) Пока не найдено решение для та же проблема с DBD::mysql   -  person Håkon Hægland    schedule 21.02.2021
comment
Попробуйте вручную загрузить, настроить, сделать, сделать тест, сделать установку, чтобы вы могли настроить configure и makefile.   -  person ulix    schedule 21.02.2021
comment
Спасибо @ulix. Я тоже борюсь с этим. make test не работает.   -  person h q    schedule 22.02.2021
comment
@hq Можете ли вы попробовать этот PR?   -  person Håkon Hægland    schedule 14.04.2021
comment
@Håkon Hægland Я не верю, что вы можете использовать otool, пока включена защита целостности системы. Библиотека становится непригодной. Я попробую еще раз и обновлю этот комментарий.   -  person h q    schedule 14.04.2021
comment
@hq Я не верю, что вы можете использовать otool при включенной защите целостности системы Я не уверен, что вы имеете в виду? У меня включен SIP. Вы имеете в виду пиар? PR не использует otool, он просто модифицирует Makefile.PL таким образом, что компоновщик включает rpath в сгенерированный файл Oracle.bundle. Делая это таким образом, нам не нужно использовать переменную DYLD_LIBRARY_PATH (что вызывает проблемы из-за этой проблемы)   -  person Håkon Hægland    schedule 14.04.2021


Ответы (1)


Проблема в том, что переменная среды DYLD_LIBRARY_PATH не распространяется на perl при запуске make test, как описано здесь. Вместо запуска cpanm DBD::Oracle вы можете скачать модуль и запустить тесты вручную, используя, например, prove. У меня сработало следующее (macOS BigSur 11.2.1), perlbrew perl версии 5.32.0:

  • Загрузите и установите instantclient-basic-macos.x64-19.8.0.0.0dbru.dmg и instantclient-sdk-macos.x64-19.8.0.0.0dbru.dmg с https://www.oracle.com/database/technologies/instant-client/macos-intel-x86-downloads.html

  • Установите DBD::Oracle (не запуская make test)

    $ wget https://cpan.metacpan.org/authors/id/M/MJ/MJEVANS/DBD-Oracle-1.80.tar.gz
    $ tar zxvf DBD-Oracle-1.80.tar.gz
    $ cd DBD-Oracle-1.80
    $ export DYLD_LIBRARY_PATH=/Users/hakonhaegland/Downloads/instantclient_19_8
    $ export ORACLE_HOME=/Users/hakonhaegland/Downloads/instantclient_19_8
    $ cpanm --installdeps .
    $ perl Makefile.PL
    $ make
    $ prove -bv t  
    $ make install
    

ЗАМЕТКИ:

person Håkon Hægland    schedule 21.02.2021
comment
Спасибо. Это все еще не работает для меня. Два вопроса: 1) Используете ли вы библиотеку DBI, поставляемую с Big Sur? 2) Что выводит otool -L libclntsh.dylib.19.1? Это @rpath/libclntsh.dylib.19.1 (как у меня) или /Users/hakonhaegland/Downloads/instantclient_19_8/libnnz19.dylib (как я думаю, должно быть)? - person h q; 22.02.2021
comment
Я получаю тот же результат от otool -L - person Håkon Hægland; 22.02.2021
comment
Это все еще не работает для меня.. Странно, вы получаете ту же ошибку при запуске prove -vb t, что и при запуске make test? - person Håkon Hægland; 22.02.2021
comment
Используете ли вы библиотеку DBI, поставляемую с Big Sur? Вы имеете в виду модуль Perl DBI? - person Håkon Hægland; 22.02.2021
comment
Спасибо @Håkon. Да, я имел в виду модуль DBI, поставляемый с Big Sur. Несмотря на то, что это та же версия, я получаю make: *** No rule to make target '/System/Library/Perl/Extras/5.28/darwin-thread-multi-2level/auto/DBI/Driver_xst.h', needed by 'Oracle.xsi'. Stop., поэтому я принудительно устанавливаю DBI, чтобы продолжить. - person h q; 23.02.2021
comment
prove -bv t к сожалению, выдает точно такую ​​же ошибку. Can't load '/Users/x/.cpanm/work/1614090296.40854/DBD-Oracle-1.80/blib/arch/auto/DBD/Oracle/Oracle.bundle' for module DBD::Oracle: dlopen(/Users/x/.cpanm/work/1614090296.40854/DBD-Oracle-1.80/blib/arch/auto/DBD/Oracle/Oracle.bundle, 0x0001): dependent dylib '@rpath/libclntsh.dylib.19.1' not found for '/Users/x/.cpanm/work/1614090296.40854/DBD-Oracle-1.80/blib/arch/auto/DBD/Oracle/Oracle.bundle'. relative file paths not allowed '@rpath/libclntsh.dylib.19.1' at /System/Library/Perl/5.28/darwin-thread-multi-2level/DynaLoader.pm line 197 - person h q; 23.02.2021
comment
Поэтому я принудительно установил DBI. Я думаю, вы используете системный Perl вместе с local::lib, тогда как я использую perlbrew. При использовании perlbrew я не использую модуль DBI системного perl. Я просто устанавливаю его с помощью cpanm DBI. Не могли бы вы попробовать с perlbrew? Было бы интересно посмотреть, если вы получите ту же ошибку - person Håkon Hægland; 24.02.2021
comment
Кстати, когда я запускаю тест для DBD::Oracle, я получаю сообщение Не удается подключиться к экземпляру Oracle. Без подключения к базе данных большая часть набора тестов DBD::Oracle будет пропущена. Вам также нужно настроить сервер базы данных? (Должен признаться, я никогда не пользовался базой данных Oracle). "nofollow noreferrer">эта запись в блоге Oracle не поддерживает macOS, и вам необходимо настроить сервер с помощью контейнера Docker. - person Håkon Hægland; 24.02.2021
comment
Мне нужно только DBD::Oracle для извлечения записей из удаленной базы данных Oracle. Меня не волнуют ошибки подключения к базе данных во время тестов. - person h q; 24.02.2021
comment
Он работает с Homebrew Perl. Спасибо Хокон! - person h q; 24.02.2021