初次使用AIX的烦恼与解决之道(suse代码移植AIX平台)

或许,对于初入职场的我们来说,最郁闷的事情莫过于一套代码在suse上编译、运行万事ok,领导却突然告诉你,代码在AIX平台上有问题,看一下什么情况

听君一席话,两眼泪千行!!!!!!!!!!!!

擦干眼泪,活还得接着干,因为咱们是迎难而上的程序猿!奋起吧猴儿们

好,言归正传!

一、一套程序要想跑起来,最重要的就是要首先能编译通过,编不过啥都白扯,怎么办呢?

Answer:把suse上运行程序的环境变量脚本移植过来就可以了啊!哈哈哈哈哈哈哈哈

但是,如果你要的程序要是需要连接数据库,千万不要忘记修改ORACLE_HOME之类和oracal相关的环境变量,当然还有path等

二、编译开始且成功,下面要运行程序了,结果呢..........

报错了:Could not load program ./bpm:
        Dependent module libstdc++.a(libstdc++.so.6) could not be loaded.
       Could not load module libstdc++.a(libstdc++.so.6).
       System error: No such file or directory

可以看到,是找不到libstdc++.a,那你可能要说了,找一个就行了呗!亲,关键的问题是,你要这么熟悉新环境,那就不叫新环境了........

说说我的苦B过程吧:

1、ldd program_name 查看当前命令依赖的库文件,显示如下

Cannot find libstdc++.a(libstdc++.so.6)
Cannot find libgcc_s.a(shr.o)

其他的则都显示

         /lib/libcrypt.a(shr_64.o)
         /lib/libcfg.a(shr_64.o)
         /lib/libodm.a(shr_64.o)
         /lib/liblvm.a(shr_64.o)

那就去cd /lib下面找吧,结果一看,真没有(肯定没有,有的话刚才ldd就找到了............)

2、那咋办,去suse上搞个libstdc++.so.6过来吧(其实很幼稚的一步,很明显不能用的)

3、肿么办?www.ibm.com,然后输入Cannot find libstdc++.a(libstdc++.so.6)开始搜索,果然有收获

I have verified that the file libstdc++.a is present along the following paths:

/opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.0.0/libstdc++.a
/opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.0.0/ppc64/libstdc++.a
/opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.0.0/pthread/libstdc++.a
/opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.0.0/pthread/ppc64/libstdc++.a

4、果断奔到/opt/freeware/lib下找,瞬间我泪奔了,亲........我找你找的好苦啊 cp libstdc++.a libgcc_s.a ~/lib

~/lib 要加到path里面去,不然找不到的

5、小得意了一下,开始ldd bpm 果然不报错了(注意,要用64位的,其实上面直接cp过去的是不对的,应该去更深目录找,后话),开始运行程序

6、又报错了...............

Could not load program bpm:
        Dependent module lib/libstdc++.a(libstdc++.so.6) could not be loaded.
        The module has an invalid magic number.

7、ldd没错啊,怎么就不行呢,原来就是第5条的原因,根本就没必要cp 直接加一下libpath就可以了

LIBPATH=/opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.4.6/pthread/ppc64/

8、ldd检查一下,libstdc++.a和libgcc_s.a全是

         /opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.4.6/pthread/ppc64/libstdc++.a(libstdc++.so.6)
         /opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.4.6/pthread/ppc64/libgcc_s.a(shr.o)

这样程序就ok了,可以运行了

9、下面开始跑程序吧(连数据)

结果报错了:ORA-12705: invalid or unknown NLS parameter value specified
明眼人一看就是NLS的问题了,不过新手还真可能没注意这一点,请教大牛,说关一下NLS_LANG这个变量,但编了还是报错,和现场比对一样,还是报错

咋办?www.ibm.com 输入ORA-12705: invalid or unknown NLS parameter value specified查询

看到一个法国朋友写的:Problem(Abstract)

  $ export NLS_LANG=FRENCH_FRANCE.WE8ISO8859P1
Resolving the problem:$ export NLS_LANG=FRENCH_FRANCE
$ export LANG=french.iso88591
而我的是 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

嘿,为何不拆掉.ZHS16GBK试试,结果......................

成功啦啦啦啦啦啦啦................................................

(还有一个环境变量SHLIB_PATH没有设置,也没有出问题,如果需要可以试试)

So happy!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


 

 

 

你可能感兴趣的:(UNIX,AIX,AIX,数据库,实用技巧)