从源代码安装perl 5.8+DBI/DBD

来源:互联网 发布:中国行政区域数据库 编辑:程序博客网 时间:2024/05/20 16:13

最近工作需要用perl访问oracle,因此需要在Sun服务器上安装perl DBI/DBDpm包。服务器上的Solaris 9已经自带5.6.1版本的perl。在CPAN(这真是一个好网站啊,对perl的推广功不可没!)上查阅时发现DBIperl 5.6.1的支持很差。所以我想再Solaris 9上装上perl 5.8。(SunOS 5.10是自带5.8版本的perl的,Perl –v就能看到你的perl版本。)

 

环境:测试机是4 SPARC CPU/solaris 9 SUN服务器。由于不能连接外部网络,所以无法通过CPAN进行安装;而且我也没有root权限,因此也无法下载安装包进行pkgadd的安装。那就试试从source编译安装吧!

 

1. perl.org下载5.8 source

   对于perl,目前5.10source还是testing的状态,所以稳定起见,选择状态是maint5.8 发行版。

这一步有一点必须注意:从windowssolarisftp传送.gz包时一定要用binary模式,否则传上去的大小就会变化,少几个字节,而且用gunzip进行解压时,会报CRC error(冗余校验码错误)的错误。

 

2. 运行Configureshell脚本。

按照提示一步一步进行设置编译环境(系统架构/操作系统/编译器等参数)和安装参数(安装目录等等)。设置完成后会生成Makefile

如果你没有root权限,你可能对默认的安装路径没有写权限,这时应该设置成你有写权限的目录,例如你的userhome目录。

 

3. Make

这一步是用你刚才设置好的编译环境进行编译。如果没有error,则表明你刚才第一步生成的makefile没有问题。

 

4. Make test

测试你编译的程序,看看有没有问题。这一步耗时比较长,但为了以后不出问题,还是执行一下为好。一般情况这一步不太会出错。如果没有问题,就可以进行下一步的安装了。

 

5. Make install

这一步将需要的文件安装都你在前面Configure时设置的安装目录。如果安装目录不存在,这一步将建立你指令的安装目录(前题是运行make的用户有权限)。安装完的版本应该是5.8.8

 

6. 安装DBI

下载完DBI 1.607的代码后,顺序执行以下命令:

/path/to/new/perlMakefile.PL   #这一步生成makefile,注意要使用新安装的perl

make                                 #编译连接,生成的二进制文件

Make test                           #测试生成的二进制文件

make install                       #安装到新的perl目录

 

       第一步注意要使用新安装的perl!这样才会将DBI安装到新perl@INC目录下。

这一步安装完之后最好能写一个连接数据库的程序测试一下,看新安装的perl能否识别DBI的函数了。当然这个程序肯定还会报类似“DBD missing”的错误,但这已经是运行时错误而不是编译错误了,这说明我们离胜利又近了一步,现在只剩下最后一步需要做:安装DBD for Oracle

 

7. 安装DBD::Oracle

(1)下载DBD::Oracle 1.22的源码,进行编译

/path/to/new/perl Makefile.PL

(2)make

Makefile出现问题!!

Running Mkbootstrap for DBD::Oracle()

chmod 644 Oracle.bs

rm -fblib/arch/auto/DBD/Oracle/Oracle.so

LD_RUN_PATH="/opt/app/oracle9i/orabase/product/9.2.0.7/lib32:/opt/app/oracle9i/orabase/product/9.2.0.7/rdbms/lib32"/opt/SUNWspro/bin/cc  -G -L/usr/lib-L/usr/ccs/lib -L/opt/SUNWspro/WS6U2/lib Oracle.o  dbdimp.o oci8.o cc  -Xa  -xstrconst -xF    -xarch=v8 -xchip=ultra -W2,-AKNR_S-W2,-Rglobal_hoist  -Wc,-Qdelay-speculate-Wc,-Qdepgraph-safe_spec_load=3 -W2,-Rloop -errtags=yes  -v -K PIC-L/opt/SUNWcluster/lib -R/opt/SUNWcluster/lib -L/opt/app/oracle9i/orabase/product/9.2.0.7/rdbms/lib32/-L/opt/app/oracle9i/orabase/product/9.2.0.7/lib32/    -lclntsh `cat/opt/app/oracle9i/orabase/product/9.2.0.7/lib32/ldflags`   `cat/opt/app/oracle9i/orabase/product/9.2.0.7/lib32/sysliblist` -R/opt/app/oracle9i/orabase/product/9.2.0.7/lib32-laio  -lposix4 -lkstat -lm  -lthread -oblib/arch/auto/DBD/Oracle/Oracle.so  /

        /

 

ld: fatal: file cc: openfailed: No such file or directory

ld: fatal: File processingerrors. No output written to blib/arch/auto/DBD/Oracle/Oracle.so

*** Error code 1

make: Fatal error: Command failedfor target `blib/arch/auto/DBD/Oracle/Oracle.so'

编译报错提示的原因是生成的Makefile中的一个变量OTHERLDFLAGS

OTHERLDFLAGS =  cc  -Xa -xstrconst -xF    -xarch=v8-xchip=ultra -W2,-AKNR_S -W2,-Rglobal_hoist -Wc,-Qdelay-s

peculate-Wc,-Qdepgraph-safe_spec_load=3 -W2,-Rloop -errtags=yes  -v -K PIC-L/opt/SUNWcluster/lib -R/opt/SUNW

cluster/lib  -L/opt/app/oracle9i/orabase/product/9.2.0.7/rdbms/lib32/-L/opt/app/oracle9i/orabase/product/9.2.0

.7/lib32/    -lclntsh `cat/opt/app/oracle9i/orabase/product/9.2.0.7/lib32/ldflags`   `cat /opt/app/oracle9i/or

abase/product/9.2.0.7/lib32/sysliblist`-R/opt/app/oracle9i/orabase/product/9.2.0.7/lib32 -laio  -lposix4 -lkst

at -lm  -lthread

多出了“cc”。在Makefile中去掉它就可以正常编译了。这应该是一个bug

 

(3)Make test

t/10general.............DBIconnect('','scott/tiger',...) failed: ORA-12545: Connect failed because targethost or object does not exist (DBD ERROR: OCIServerAttach) at t/10general.tline 22

FAILED--Further testing stopped:Unable to connect to Oracle (ORA-12545: Connect failed because target host orobject does not exist (DBD ERROR: OCIServerAttach))

*** Error code 29

make: Fatal error: Command failedfor target `test_dynamic'

出现问题,因为test中并没不存在某个测试数据库进行测试,不用理会这个。

 

(4)make install

安装到新perl@INC目录下。

 

至此你就可以用你的perl5.8访问oracle 9i了!

原创粉丝点击