如何在OSX Snow Leopard 10.6上安装perl DBD::Oracle



我正在尝试从运行OSX 10.6雪豹的英特尔Mac连接到远程系统上的Oracle 10.2.0.4。我尝试使用perl CPAN来安装DBD::Oracle(DBI工作正常),但出现编译错误。有人可以提供易于遵循的指南吗?

让 mac 安装的 perl 与 Oracle 很好地配合使用有点痛苦 - 一旦它运行它就太棒了,让它运行有点令人沮丧。

以下内容在几个不同的英特尔 Mac 上对我有用,其中很可能有多余的步骤,其他平台可能不会相同。

这将需要使用 shell、root 用户和一些 CPANing - 没有什么太繁重的

首先为预言机pap创建一个目录 - 库,即时客户端等

sudo mkdir /usr/oracle_instantClient64

将所有 64 位即时客户端软件包从 oracle 下载并解压缩到上述目录

在该目录中为其中一个文件创建一个符号链接

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

以下 dir 被硬编码到 oracle 即时客户端中 - 天知道为什么 - 所以需要创建并符号链接它

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

需要添加几个环境变量,因此编辑/etc/profile 并添加它们,以便它们对所有用户都存在:

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

现在尝试通过CPAN安装DBD::Oracle - 这将失败,但这意味着将下载任何依赖项并为我们检索模块

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

当此操作失败时,退出CPAN并前往您的.cpan/build dir-如果您使用了CPAN的自动配置,它将是

cd ~/.cpan/build

如果您没有自动配置,则可以在 CPAN 中使用以下命令找到您的构建目录

o conf build_dir

一旦进入构建目录,请查找刚刚创建的DBD::Oracle dir(它将被称为DBD-Oracle-1.28-?)并cd到其中。

现在我们需要切换到根用户。 在osx中默认启用Root未启用 - 有关启用的详细信息,请参阅Apple网站上的此帖子

以 root 身份登录后,我们需要为 root 设置上述环境变量:

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

现在,当仍然以root身份登录时,我们需要运行模块的makefile,然后make,然后安装

perl Makefile.pl
make
make install

假设所有工作都没有错误,从root注销:我们DBD起来了! 如果这不起作用,那么是时候在谷歌上破坏你看到的任何错误

现在只需安装 DBI 模块

sudo perl -MCPAN -e shell
install DBI

现在你已经准备好了 - 享受你的神谕新生活

来自用户852637的其他信息:

  1. 此步骤的更正

    perl Makefile.pl
    make
    install
    

    最后一步应该是make install

  2. 在制作过程中,您可能会遇到如下所示的错误:

    lipo:无法打开输入文件:/var/tmp//ccIevTzM.out(没有这样的文件或目录)

    要更正此问题,您必须编辑在"perl Makefile.pl"步骤之后创建的文件"Makefile",并删除以下文本的所有匹配项:

    -arch ppc 
    

    这将消除错误。

  3. 在安装 DBI 模块期间,将发生 (2.) 中描述的相同错误。您必须编辑在perl Makefile.pl步骤之后创建的Makefile,并删除以下文本的所有匹配项:

    -arch ppc 
    
看起来随着

XCode4 的更改(删除 PPC arch 支持),Perl 安装在任何 10.6.X 更新中都没有更新以删除 PPC 二进制文件(可能是因为 Rosetta仍然存在)。

因此,配置文件保留"-arch ppc",导致所有使用C库编译的CPAN模块失败,因为MakeMaker的输出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';

完成此操作后,生成的生成文件将是正确的。

这是一组很棒的说明。我对潜在的"陷阱"还有其他一些评论。

  1. 此步骤的更正

    perl Makefile.pl
    make
    install
    

    最后一步应该是make install

  2. 在制作过程中,您可能会遇到如下所示的错误:

    lipo:无法打开输入文件:/var/tmp//ccIevTzM.out(没有这样的文件或目录)

    要更正此问题,您必须编辑在"perl Makefile.pl"步骤之后创建的文件"Makefile",并删除以下文本的所有匹配项:

    -arch ppc 
    

    这将消除错误。

  3. 在安装 DBI 模块期间,将发生 (2.) 中描述的相同错误。您必须编辑在perl Makefile.pl步骤之后创建的Makefile,并删除以下文本的所有匹配项:

    -arch ppc 
    
似乎

"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

我意识到这是因为需要从 Makefile 中删除"-arch ppc"参数,但即使在删除了所有 32 位引用的删除之后,我仍然看到了错误消息。

运行 10.6.8 雪豹与 Oracle 驱动程序版本 10.2.0.4

我发现这个问题的关键是确保 MakeFile.pl 可以找到 Oracle 版本。

我遇到的问题是 Safari 正在从 Oracle.com 下载 zip 文件,但解压缩它们并以某种方式损坏了库。

相反,我使用了不同的浏览器并将所有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.pl 脚本生成的 Makefile 来删除"-arch ppc"引用。

不应在计算机上重新创建与客户端库打包程序相同的目录结构。

不要做mkdir -p /b/227/rdbms/

使用 MacOSX 库标头管理工具:otoolinstall_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 即时客户端库附带的所有文件,并修复所有依赖库的路径

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 .

相关内容

  • 没有找到相关文章

最新更新