Как установить Perl DBD :: Oracle на OSX Snow Leopard 10.6? - PullRequest
3 голосов
/ 11 мая 2011

Я пытаюсь подключиться к Oracle 10.2.0.4 в удаленной системе с моего Intel Mac под управлением OSX 10.6 Snow Leopard. Я пытался использовать Perl CPAN для установки DBD :: Oracle (DBI работал нормально), но получить ошибки компиляции. Может ли кто-нибудь предоставить простое руководство?

Ответы [ 5 ]

4 голосов
/ 05 августа 2011

Похоже, с изменением XCode4 (удаление поддержки арки PPC) установка Perl не была обновлена ​​ни в одном из обновлений 10.6.X, чтобы также удалить двоичные файлы PPC (возможно, потому что Rosetta все еще присутствует).

Из-за этого в файлах конфигурации сохраняется «-arch ppc», что приводит к сбою всех компиляций модуля CPAN с библиотеками C, поскольку выходной Makefaker Makefile содержит -arch ppc.

Чтобы исправить это, можно отредактировать следующий файл:

/System/Library/Perl/5.10.0/darwin-thread-multi-2level/Config_heavy.pl  

в строке 1219 вы увидите:

$archflags = exists($ENV{ARCHFLAGS}) ? $ENV{ARCHFLAGS} : '-arch x86_64 -arch i386 -arch ppc';

изменить это на:

$archflags = exists($ENV{ARCHFLAGS}) ? $ENV{ARCHFLAGS} : '-arch x86_64 -arch i386';

Как только вы сделаете это, сгенерированный Makefile будет правильным.

4 голосов
/ 11 мая 2011

Заставить Mac установить Perl для приятной игры с oracle - это немного больно - как только он запускается, это просто фантастика, запускать его немного разочаровывает ..

Ниже работает для менянесколько разных macs intel, там вполне могут быть лишние шаги, и, скорее всего, они не будут такими же для других платформ.

Это потребует использования оболочки, пользователя root и немного CPANing -ничего лишнего

Прежде всего создайте каталог для папок оракула - библиотеки, мгновенные клиенты и т. д.

sudo mkdir /usr/oracle_instantClient64

Загрузите и извлеките все 64-битные мгновенные клиентские пакеты из oracle в указанный выше каталог

Создайте символическую ссылку в этом каталоге для одного из файлов в этом каталоге

sudo cd /usr/oracle_instantClient64
sudo ln -s /usr/oracle_instantClient64/libclntsh.dylib.10.1 libclntsh.dylib

Следующий каталог жестко закодирован в клиент мгновенного доступа Oracle - Бог знает почему - поэтому необходимосоздайте и вставьте ссылку

sudo mkdir -p /b/227/rdbms/
sudo cd /b/227/rdbms/
sudo ln -s /usr/oracle_instantClient64/ lib

Необходимо добавить пару переменных среды, поэтому отредактируйте / etc / profile и добавьте их, чтобы они существовали для всех пользователей.s:

export ORACLE_HOME=/usr/oracle_instantClient64
export DYLD_LIBRARY_PATH=/usr/oracle_instantClient64

Теперь попробуйте установить DBD :: Oracle через CPAN - это не удастся, но это означает, что все зависимости будут загружены, и он получит модуль для нас

sudo perl -MCPAN -e shell
install DBD::Oracle

Если это не удается, выйдите из CPAN и перейдите в каталог .cpan / build - если вы использовали автоматическую настройку CPAN, это будет

cd ~/.cpan/build

, если вы не настроите автоконфигурацию, вы можете найти каталог сборки с помощьюследующая команда в CPAN

o conf build_dir

Однажды в dir сборки найдите DBD :: Oracle dir, который только что был создан (он будет называться что-то вроде DBD-Oracle-1.28-?) и перейдите вэто.

Теперь нам нужно переключиться на пользователя root.Root не включен по умолчанию в osx - подробности о включении см. В этом посте на веб-сайте apple

После входа в систему как root нам нужно установить указанные выше переменные окружения для root:

export ORACLE_HOME=/usr/oracle_instantClient64
export DYLD_LIBRARY_PATH=/usr/oracle_instantClient64

Теперь, когда вы все еще вошли в систему как root, нам нужно запустить make-файл для модуля, затем make, затем установить

perl Makefile.pl
make
make install

Предполагая, что все работает без регистрации ошибок из root:мы встали на ноги!Если это не сработало, пришло время устранить Google из-за ошибок, которые вы видите

Теперь просто установите модуль DBI

sudo perl -MCPAN -e shell
install DBI

Теперь все готово - наслаждайтесьperly oracley new life

Дополнительная информация от пользователя 852637:

  1. Исправление к этому шагу

    perl Makefile.pl
    make
    install
    

    Последний шаг должен быть make install

  2. Во время make вы можете столкнуться с ошибкой, которая выглядит следующим образом:

    lipo: невозможно открыть входной файл: /var/tmp//ccIevTzM.out (Нет такого файла или каталога)

    Чтобы исправить это, вы должны отредактировать файл «Makefile», созданный после шага «perl Makefile.pl», и удалить все вхождения следующего текста:

    -arch ppc 
    

    Это устранит ошибку.

  3. Та же самая ошибка, описанная в (2.), произойдет во время установки модуля DBI.Вы должны отредактировать Makefile, созданный после шага perl Makefile.pl, и удалить все вхождения следующего текста:

    -arch ppc 
    
3 голосов
/ 19 июля 2011

Это отличный набор инструкций.У меня есть несколько других комментариев о потенциальных "ошибках".

  1. Исправление к этому шагу

    perl Makefile.pl
    make
    install
    

    Последний шаг должен быть make install

  2. Во время make вы можете столкнуться с ошибкой, которая выглядит следующим образом:

    lipo: невозможно открыть входной файл: /var/tmp//ccIevTzM.out (такого файла нетили каталог)

    Чтобы исправить это, необходимо отредактировать файл «Makefile», созданный после шага «perl Makefile.pl», и удалить все вхождения следующего текста:

    -arch ppc 
    

    Это устранит ошибку.

  3. Та же самая ошибка, описанная в (2.), произойдет во время установки модуля DBI.Вы должны отредактировать Makefile, созданный после шага perl Makefile.pl, и удалить все вхождения следующего текста:

    -arch ppc 
    
1 голос
/ 13 ноября 2013

Вы не должны воссоздавать на своем компьютере ту же структуру каталогов, что и у упаковщика клиентских библиотек.

Не выполнять mkdir -p /b/227/rdbms/

Использовать инструменты управления заголовками библиотек MacOSX: otoolи install_name_tool

Например, я обновил заголовки библиотек для своей архитектуры развертывания:

otool -L /usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1
/usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1:
    /ade/b/2649109290/oracle/rdbms/lib/libclntsh.dylib.11.1 (compatibility version 0.0.0, current version 0.0.0)
    /ade/b/2649109290/oracle/ldap/lib/libnnz11.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

install_name_tool -id /usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1 \
              -change /ade/b/2649109290/oracle/ldap/lib/libnnz11.dylib /usr/oracle_instantclient/11.2.0.3.0-64-bit/libnnz11.dylib /usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1


otool -L /usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1
/usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1:
    /usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1 (compatibility version 0.0.0, current version 0.0.0)
    /usr/oracle_instantclient/11.2.0.3.0-64-bit/libnnz11.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

Проверьте все файлы, которые поставляются с библиотеками Oracle InstantClient, и исправьте путь всех зависимыхlibs

otool -L adrci
otool -L genezi
otool -L libclntsh.dylib.11.1
otool -L libheteroxa11.dylib
otool -L libnnz11.dylib
otool -L libocci.dylib.11.1
otool -L libociei.dylib
otool -L libocijdbc11.dylib
otool -L libsqlplus.dylib
otool -L libsqlplusic.dylib
otool -L sqlplus
otool -L uidrvci

Затем вы связываете свои динамические библиотеки с тем местом, где они должны быть.

И вы можете избежать использования этого export DYLD_LIBRARY_PATH, потому что вы знаете, как настроить вашу систему

cd /usr/lib
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1 .
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1 libclntsh.dylib
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libheteroxa11.dylib .
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libnnz11.dylib .
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libocci.dylib.11.1 .
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libocci.dylib.11.1 libocci.dylib
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libociei.dylib .
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libocijdbc11.dylib .
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libsqlplus.dylib .
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libsqlplusic.dylib .
1 голос
/ 27 июля 2011

Кажется, что команда "Perl MakeFile.pl" не находит версию Perl правильно, и я получаю это сообщение об ошибке:

bash-3.2# perl Makefile.PL 
Multiple copies of Driver.xst found in: /Library/Perl/5.10.0/darwin-thread-multi-2level/auto/DBI/ /System/Library/Perl/Extras/5.10.0/darwin-thread-multi-2level/auto/DBI/ at Makefile.PL line 37
Using DBI 1.616 (for perl 5.010000 on darwin-thread-multi-2level) installed in /Library/Perl/5.10.0/darwin-thread-multi-2level/auto/DBI/

Configuring DBD::Oracle for perl 5.010000 on darwin (darwin-thread-multi-2level)

Remember to actually *READ* the README file! Especially if you have any problems.

Installing on a darwin, Ver#10.0
Using Oracle in /usr/oracle_instantClient64
Can't find sqlplus. Pity, it would have helped.
I'm having trouble finding your Oracle version number... trying harder

WARNING: I could not determine Oracle client version so I'll just
default to version 8.0.0.0. Some features of DBD::Oracle may not work.
Oracle version based logic in Makefile.PL may produce erroneous results.
You can use "perl Makefile.PL -V X.Y.Z" to specify a your client version.

Oracle version 8.0.0.0 (8.0)
DBD::Oracle no longer supports Oracle client versions before 9.2 
 Try a version before 1.25 for 9 and 1.18 for 8! at Makefile.PL line 175.

I've triple checked that I've downloaded and installed the proper 64-bit drivers from Oracle. I also checked to make sure that I'm running 64-bit Perl.

Если я введу номер версии следующим образом:

perl MakeFile.pl -V 10.2.0.4

Завершается, но я получаю сообщение об ошибке при запуске "make":

Oracle.c:2267: error: ‘SQLT_BIN’ undeclared (first use in this function)
Oracle.c:2277: error: ‘SQLCS_NCHAR’ undeclared (first use in this function)
Oracle.c:2281: error: ‘SQLT_INT’ undeclared (first use in this function)
Oracle.c:2283: error: ‘OCI_FETCH_PRIOR’ undeclared (first use in this function)
Oracle.c:2287: error: ‘OCI_FETCH_NEXT’ undeclared (first use in this function)
lipo: can't open input file: /var/tmp//ccyIFLPN.out (No such file or directory)
make: *** [Oracle.o] Error 1

Я понимаю, что это из-за аргумента "-arch ppc", который нужно удалить из Makefile, но даже после удаления удаления всех 32-битных ссылок я все еще видел сообщение об ошибке.

Запуск 10.6.8 Snow Leopard с драйвером Oracle версии 10.2.0.4

Я обнаружил, что ключ к этой проблеме заключается в том, чтобы MakeFile.pl мог найти версию Oracle.

Проблема, с которой я столкнулся, заключалась в том, что Safari загружал zip-файлы с Oracle.com, но разархивировал их и каким-то образом повредил библиотеку.

Вместо этого я использовал другой браузер и загрузил все zip-файлы в один каталог. Затем я запустил следующие команды tar:

tar -xf instantclient-basic-10.2.0.4.0-macosx-x64.zip 
tar -xf instantclient-sdk-10.2.0.4.0-macosx-x64.zip 
tar -xf instantclient-sqlplus-10.2.0.4.0-macosx-x64.zip

Копировать все содержимое папки "instantclient_10_2" в $ ORACLE_HOME (установлено ранее)

sudo cp -R instantclient_10_2/* $ORACLE_HOME

Кроме того, мне не нужно было редактировать Makefile, сгенерированный скриптом MakeFile.pl, чтобы удалить ссылки "-arch ppc".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...