初次使用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!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章