或许,对于初入职场的我们来说,最郁闷的事情莫过于一套代码在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!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!