在AIX 5L上尷尬的GCC

2021-04-09 06:54:27 字數 3398 閱讀 6164

何謂尷尬呢?

aix 5l

上本身有編譯器

-visual age c/c++

,但是不知怎麼的,老連裝上的

visual age

有問題,什麼問題呢?就是不能編譯程式,老是提示你編譯錯誤。

為此我跟嚴明作了乙個試驗,編譯一段**,用普通使用者

oracle

不能編譯過去,但是用

oracle

切換成root

使用者就能編譯過去,而且必須是切換成的

root

,不能是直接登入的

root

,我猜想可能是環境變數設定問題,嚴明說時原始檔的問題,他說按照

ansi

標準,原始檔的函式中必須把變數宣告放在最前面,他改了程式,果然能編譯,不過也必須要在

root

下編譯。最要命的事,

xlc只能編譯

c程式,不能編譯

c++,它說什麼證書之類的東西沒有被安裝。不管怎麼樣,

xlc是乙個收費軟體,我連想重新編譯一下都不成,而且這些東西必須要

ibm的相關證書才成,只有

ibm才知道這是為什麼吧。

還有另外一方面,據網上傳說,

xlc並沒有完全遵從

ansi c++

規範,它的

std c++

類庫與ansi

規定的std c++

類庫也不一樣,這意味著我們用

stl庫寫的程式可能面臨很大的改動,由於我們寫的程式呼叫的都是標準的

stl庫。

因此,我還是投入了

gnu的

gcc/g++

懷抱,我從網上

down

了gcc 3.4.4

的source

檔案,打算在

aix 5.3

系統上編譯安裝。誰知道錯誤百出,才知道

aix系統支援開源**不是特別的好。

第乙個錯誤,

aix上的

make

程式不同於

gnu的

make

程式,gcc

的makefile

是用gnu

的make

程式來執行的,所以我先裝了乙個

gnu的

make

程式。

第二次錯誤是因為找不到

xlc編譯器或者它沒有正常執行,解決辦法是老辦法——

oracle

使用者登入進去切成

root

,再開始安裝,ok!

第三次錯誤是資源超出限制,這裡要說一下,

aix對全部使用者使用系統資源是有限制的,就算你是萬能的

root

也是一樣,因此我更該了一些資源限額,重新引導了一下系統,也搞定了這個錯誤。

第四個錯誤就更奇怪了,是在

stage 3

的時候出的,說檔案比較,兩個階段產生的檔案不一樣,結果就放棄了。我在網上查詢這個錯誤的解決方案,杳無音信。最後,見到一根救命稻草,它說,別管這個錯誤,

gcc其實已經編譯完成了……

看一下

gcc –v

,果然可以用了。但是,但是……居然還要我安裝

libstdc++

之類的庫,而這些庫的安裝又很耗時間,都不是能一次安裝上的。

看來只有選擇

ibm提供的

took kit

裡面的gcc rpm

安裝包了,由於是為

aix 5.3

所定製的,所以安裝沒有問題,安裝通過,現在

gcc/g++

都能正常使用了。

gnu

軟體給我提供的乙個很好的思路就是,它的安裝方式,一般

gnu源**包都要在源**目錄建乙個目標目錄,在目標目錄下面執行源**目錄下面的

configure

指令碼,執行這個指令碼會在當前的目標目錄下生成乙個

makefile

檔案,執行

make bootstrap

,make install

就能將源**編譯成可執行程式並且安裝到系統中去。

為此我編了乙個指令碼,名字叫

configure

,放在我編寫的程式源檔案目錄下,在源檔案目錄下建立乙個

out目錄,進入

out目錄,執行

../configure

,自動在當前目錄下生成

makefile

檔案,生成的再執行

make

就可以進行編譯程式了。

話說回來,為什麼叫尷尬的

gcc,因為

gcc裝上之後,能編譯

c/c++

源程式,可就是編譯不了

aix下的

occi

,提示內容先是找不到

-lirc

;我將這個選項去除了再編,提示

crt64

位庫不能用;刪了再編,提示無法找到

libocci.a

靜態連線庫或者它不適乙個合法的

coff

檔案;我把它刪了,提示

occi.h

的標頭檔案語法錯誤,這下實在無可奈何了,因為那個靜態連線庫

libocci.a

是必須的。

我遇到的麻煩是

oracle 10g for aix

裝在aix5l

系統上,裝出來的

libocci.a

大小為0

,就是說

libocci.a

不能正常鏈結。察看

oracle

的安裝日誌,我算服了

oracle

了,它居然用

xlc來連線

libocci.a

,而前面已經說過,

xlc不能編譯

c++程式。

因此問題又回到了

xlc上來了,由於它不能編譯

c++程式,致使

oracle

在安裝的時候不能正常地連線

libocci.a

,所以使用

occi

的程式在呼叫這個靜態連線庫的時候,顯示檔案大小為

0……嗚乎哉,難道

oracle

安裝的時候不會根據系統環境自行選定

gcc編譯器麼?還是這個版本的

oracle

只能用xlc

鏈結?這實在是

gcc的尷尬。

因為無法搞定

xlc,所以也無法搞定

occi

,於是我要殺死

aix,在

powerpc

的基礎上搭建

linux

系統。這下

oracle

在編譯的時候總該採用

gcc來鏈結

occi

了吧!

E引數在gcc上的好處

gcc的引數有很多,這裡說乙個很重要的引數 e。如果我們只是想把原始檔預處理一下,e就派上用場了。它能幹什麼?1 把使用者定義的所有的預定義 define展開。舉個例子,如果使用者有以下 define max a,b a b a b int c max a,b 經過gcc預處理後,預定義都將展開成如...

索尼尷尬 PS5商標在印度遭搶註 被迫延期上市

索尼已經正式發布了ps5遊戲主機,定於11月12日開賣,無光碟機版起步價399美元,在部分ftgjf ny市場已經開啟預購。然而在印度市場,卻出現了程式設計客棧一件尷尬事情,ps5商標至程式設計客棧今未到索尼手中。外媒報道稱,印度德里一位名叫hitesh aswani民眾早在2019年10月29日就...

在H80安裝AIX5L 5 3導致E443故障

一台h80 p660 7026 6h1 之前執行aix 5.1,客戶要求重新安裝aix5.3後裝oracle和websphere。但是之前不知道h80不支援aix 5.3,於是導致讀安裝介質後伺服器掛起 可能是介質裡的資訊和微碼有衝突 led 為e443,手動重啟,按reset,斷電再加電後再重啟都...