- 论坛徽章:
- 0
|
求助:如何装载不同的库?含原代码。针对在不同的系统的不同的驱动
同一程序可能在不同的机器上运行,因而所装载的库会有所不同。
具体到我所遇到的问题是:
DBI 因为要访问Oracle数据库,但因为仍然是Perl5,但Oracle数据库为10g,原来的Perl5的DBI不支持,因而在原来的
use DBI;
加库目录
- use lib '/Oracle10g/perlmodules/SunOS-5.8/5.005/lib/5.00503/sun4-solaris';
- use DBI;
复制代码
但是,因为机器可能为SunOS-5.8(5.9的可以和5.8相同使用),或SunOS-5.6, 故而希望有所选择
因而改为如下:
- if (`uname -r` !~ /5.6/) {
- print "SunOS-5.8/5.005/lib is used";
- use lib '/Oracle10g/perlmodules/SunOS-5.8/5.005/lib/5.00503/sun4-solaris';
- } else {
- print "SunOS-5.6/5.005/lib is used";
- use lib '/Oracle10g/perlmodules/SunOS-5.6/5.005/lib/5.00503/sun4-solaris';
- }
- use DBI;
复制代码
但最后产生如下错误信息:
- SunOS-5.8/5.005/lib is usedinstall_driver(Oracle) failed: Can't load '/Oracle10g/perlmodules/SunOS-5.6/5.005/lib/5.00503/sun4-solaris/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: ld.so.1: /apps/public/perl_5.005/bin/perl: fatal: /apps/vendor/oracle_9.2/lib/libclntsh.so.9.0: wrong ELF class: ELFCLASS64 at /apps/public/perl_5.005/lib/5.00503/sun4-solaris/DynaLoader.pm line 169.
- at (eval 1) line 3
- Perhaps a required shared library or dll isn't installed where expected at ./test.pl.10g line 62
复制代码 (line 3 就是上面的if ('uname...), line 62 是DBI->调用的地方)
以上是在SunOS5.8上运行,按理是取第一个5.8的驱动,但最后取的第二个。
(以前碰到过类似的错误,是因为ORACLE_HOME没指定,因而在程序中首先指定了:
- $ENV{'ORACLE_HOME'} = '/apps/vendor/oracle_10g';
复制代码
对于程序,如果没有if选择,而直接如 use lib ...., use DBI,程序可以运行很好
)
对于这个应用不能这么写么? 那该怎样做呢?
谢先了!!
[ 本帖最后由 charseller 于 2006-10-27 19:54 编辑 ] |
|