或許,對於初入職場的我們來說,最鬱悶的事情莫過於一套代碼在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!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!