我正在尝试从运行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的其他信息:
- 对
此步骤的更正
perl Makefile.pl make install
最后一步应该是
make install
在制作过程中,您可能会遇到如下所示的错误:
lipo:无法打开输入文件:/var/tmp//ccIevTzM.out(没有这样的文件或目录)
要更正此问题,您必须编辑在"perl Makefile.pl"步骤之后创建的文件"Makefile",并删除以下文本的所有匹配项:
-arch ppc
这将消除错误。
在安装 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';
完成此操作后,生成的生成文件将是正确的。
这是一组很棒的说明。我对潜在的"陷阱"还有其他一些评论。
- 对
此步骤的更正
perl Makefile.pl make install
最后一步应该是
make install
在制作过程中,您可能会遇到如下所示的错误:
lipo:无法打开输入文件:/var/tmp//ccIevTzM.out(没有这样的文件或目录)
要更正此问题,您必须编辑在"perl Makefile.pl"步骤之后创建的文件"Makefile",并删除以下文本的所有匹配项:
-arch ppc
这将消除错误。
在安装 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 库标头管理工具: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 即时客户端库附带的所有文件,并修复所有依赖库的路径
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 .