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

时间:2011-05-11 13:25:14

标签: perl oracle macos osx-snow-leopard dbd

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

5 个答案:

答案 0 :(得分:4)

使用perl进行mac安装以便与oracle很好地协同运行有点痛苦 - 一旦运行它就太棒了,让它运行起来有点令人沮丧......

以下内容对我来说在几个不同的英特尔Mac上工作,可能会有多余的步骤,对其他平台而言可能不会相同。

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

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

sudo mkdir /usr/oracle_instantClient64

oracle下载并提取所有64位即时客户端软件包到上面的目录

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

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目录 - 如果您使用CPAN的自动配置,它将

cd ~/.cpan/build

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

o conf build_dir

进入构建目录后,查找刚刚创建的DBD :: Oracle目录(它将被称为DBD-Oracle-1.28-?)并插入其中。

现在我们需要切换到root用户。在osx中​​默认未启用Root - 有关启用的详细信息,请参阅apple website

上的此帖子

以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

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

来自user852637的其他信息:

  1. 对此步骤的更正

    perl Makefile.pl
    make
    install
    

    最后一步应该是make install

  2. 在制作期间,您可能会遇到如下错误:

      

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

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

    -arch ppc 
    

    这将消除错误。

  3. 在安装DBI模块期间,将发生(2.)中描述的相同错误。您必须修改Makefile步骤后创建的perl Makefile.pl,并删除所有出现的以下文字:

    -arch ppc 
    

答案 1 :(得分:4)

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

因此,配置文件保留“-arch ppc”,导致所有CPAN模块与C库编译失败,因为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';

执行此操作后,生成的Makefile将是正确的。

答案 2 :(得分:3)

这些是一套很棒的指示。我还有一些关于潜在“陷阱”的评论。

  1. 对此步骤的更正

    perl Makefile.pl
    make
    install
    

    最后一步应该是make install

  2. 在制作期间,您可能会遇到如下错误:

      

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

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

    -arch ppc 
    

    这将消除错误。

  3. 在安装DBI模块期间,将发生(2.)中描述的相同错误。您必须修改Makefile步骤后创建的perl Makefile.pl,并删除所有出现的以下文字:

    -arch ppc 
    

答案 3 :(得分:1)

似乎“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位引用,我仍然看到了错误消息。

使用Oracle驱动程序版本10.2.0.4运行10.6.8 Snow Leopard

我发现此问题的关键是确保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”引用。

答案 4 :(得分:1)

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

不要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 .