xlc編譯連接問題
㈠ 新手入門:AIX下如何用命令行編譯並執行一個C程序GCC和CC的區別是什麼
謝謝! 明天我去試一下。另外,在AIX下我輸入:gcc -v 想查看GCC版本號,提示GCC不存在,但是輸入:cc -v 則提示IBM XLC的版本信息,不知道這個是什麼原因 ?
㈡ AIX下xlc編譯C程序報警,Duplicate symbol,求助
plicate symbol是一種常見的鏈接錯誤,不像編譯錯誤那樣可以直接定位到問題的所在。但是經過一段時間的總結,發現這種錯誤總是有一些規律可以找的。
例如,我們有如下的最簡單的兩個類代碼:
// ClassA.h
#import <Foundation/Foundation.h>
@interface ClassA : NSObject
@end
// ClassA.m
#import "ClassA.h"
@implementation ClassA
@end
// ClassB.h
#import <Foundation/Foundation.h>
@interface ClassB : NSObject
@end
// ClassB.m
#import "ClassB.h」
@implementation ClassB
@end
編譯後出現的錯誤信息如下:
plicate symbol _OBJC_METACLASS_$_ClassA in:
/Users/dajie/Library/Developer/Xcode/DerivedData/linkTest-cpjaaatiyqpvxcbzfzpklcbqrgqg/Build/Intermediates/linkTest.build/Debug-iphonesimulator/linkTest.build/Objects-normal/i386/ClassA.o
/Users/dajie/Library/Developer/Xcode/DerivedData/linkTest-cpjaaatiyqpvxcbzfzpklcbqrgqg/Build/Intermediates/linkTest.build/Debug-iphonesimulator/linkTest.build/Objects-normal/i386/ClassB.o
plicate symbol _OBJC_CLASS_$_ClassA in: /Users/dajie/Library/Developer/Xcode/DerivedData/linkTest-cpjaaatiyqpvxcbzfzpklcbqrgqg/Build/Intermediates/linkTest.build/Debug-iphonesimulator/linkTest.build/Objects-normal/i386/ClassA.o
/Users/dajie/Library/Developer/Xcode/DerivedData/linkTest-cpjaaatiyqpvxcbzfzpklcbqrgqg/Build/Intermediates/linkTest.build/Debug-iphonesimulator/linkTest.build/Objects-normal/i386/ClassB.old: 2
plicate symbols for architecture i386clang:
error: linker command failed with exit code 1 (use -v to see invocation)
從上面出現問題的地方,我們應該能推測出是ClassA這個類出了問題。如果這個類是我們自己寫的,就容易辦一些。
可以考慮以下原因:
1.引入頭文件時,由於疏忽,誤引入.m文件。這種一般仔細檢查一下出現問題的類的源文件就能發現。
例:ClassB.m 文件修改成下面這樣
#import "ClassB.h>"
#import "ClassA.m」 // 這句話有問題
@implementation ClassB
@end
2.同一個類,實現兩次,即有兩個@implementation 。這種一般會有一個警告,也比較容易發現。
例:ClassB.m文件修改成下面這樣:
// ClassB.m
#import "ClassB.h」
@implementation ClassB
@end
@implementation ClassA
@end
3.工程文件,同一個類文件被引入了兩次,引起這種錯誤的原因大概有兩種:一是多人協作開發時,導致project文件合並沖突;二是同名文件不在同一目錄下,添加到工程時造成重復添加。 這種一般在文件視圖,用名字過濾器檢查一下就發現了。
4. Targets的Build Phase設置項里,查看Complie Sources這一項,看看出現問題的類是不是有重復的,用文件名過濾也比較容易發現。這種問題一般也是多人協作開發時,project文件沖突導致的。發現這種問題,只要刪除就可以了。不過在我解決問題過程中,刪除其中一個文件時,重復文件會自動全部刪除,所以還需要單獨添加一下。
5.如果我們的工程中引用了第三方的庫,而恰好第三方的庫裡面有一個ClassA,也會出現這種問題。如果不能修改第三方的庫代碼,只能修改我信自己的代碼了。
㈢ AIX系統下,採用xlC_r編譯、鏈接多個動態庫,不同的動態庫有同名的類,導致程序異常退出,如何解決
用域操作來區分同名類, 使用的時候指明域名就可以了
比如這樣: 你把其中一個同名類用域名來操作,另一個用全局域操作,當然,你也可以都採用命名空間來處理.
m.cpp:#include <stdio.h>
m.cpp:namespace james
m.cpp:{
m.cpp: #include "james.h"
m.cpp:}
m.cpp:class AA
m.cpp:{
m.cpp:public:
m.cpp: AA() { printf("A() %s\n", __FILE__); }
m.cpp: ~AA() { printf("~A()\n"); }
m.cpp:};
m.cpp://using namespace james; // 這句如果放開就會命名沖突, 你可以試試,如果要方便使用,就是兩個類用兩個不同的命名空間,然後在某個文件中如果僅僅用到其中一個,那麼你可以用using 關鍵字指定其中一個, 就和你原來的使用一樣了.
m.cpp:int main()
m.cpp:{
m.cpp: james::AA o;
m.cpp: AA o2;
m.cpp:}
james.h:#include <stdio.h>
james.h:
james.h:class AA
james.h:{
james.h:public:
james.h: AA() { printf("A() %s\n", __FILE__); }
james.h: ~AA() { printf("~A()\n"); }
james.h:};
Makefile:
Makefile:all: m.cpp james.h
Makefile: g++ $^
㈣ aix中怎樣安裝xlc
有2種xlc
1、運行庫,AIX光碟即帶有,安裝完AIX時自動安裝。
2、編譯器,這個需要從IBM購買,其介質也是光碟,使用installp命令安裝即可。或者使用smit快捷命令也可以安裝,在安裝xlc編譯器之前,需要安裝bos.adt、bos.data等依賴的文件集,安裝過程如果由於文件集依賴關系失敗的話,通過檢查安裝日誌可以看到依賴的文件集的安裝情況。
㈤ 我寫的unix下helloworld例子,編譯出錯,為什麼
錯誤:
1)未使用標準的頭文件寫法,應該是cstdio,而不是stdio.h,且應該使用<>,而不是雙引號。
2)文件名應該是.cpp .cc之類,不能是.c,除非另加編譯參數(-x c++)。
2)main函數最好添加類似return 0的語句,或者調用exit函數。
㈥ 如何在aix設置xlc編譯器path環境變數
設置ORACLE_HOME環境變數,一般是sqlplus所在位置的上一級再上一級目錄, 然後設置PATH,加入$ORACLE_HOME/bin 給你一個示例 export ORACLE_BASE=/ora10 export ORACLE_HOME=$ORACLE_BASE/proct/10.2.0/db_1/ export PATH=$ORACLE_HOME/bin:$P
㈦ 求助大神,WRF安裝編譯時出錯,放上log部分求幫助解決
WRF最初的安裝步驟,適合初學者
WRF(Weather Research and Forecasting Model),是由美國國家大氣研究中心(NCAR)和美國國家海洋和大氣管理局(NOAA)共同開發的數值模式。
該模式運行於linux或UNIX之類的環境下;或者在windows系統下安裝虛擬機,虛擬linux環境進行編譯運行。
像大多數linux下的開源軟體,官方發布的WRF是源碼包,需要先編譯才能夠生成可執行文件進而運行模式。
以下是從下載到編譯的最初步驟。
工具/原料
linux(或UNIX、AIX)之類系統的電腦或伺服器一台(需已安裝NETCDF)
方法/步驟
1
如果你自己安裝了linux系統,這一步可以直接跳過;
如果你知道如何通過xmanager或其他ssh工具連接到自己能夠訪問的linux伺服器,這一步可以跳過。
如果你既沒有自己的linux系統,又不會使用ssh工具連接已有的linux(UNIX/AIX)伺服器,這一步是必須看的。
以xmanager為例(軟體請自行搜索下載)
安裝完成後運行Xshell,點擊新建(如圖)
在Host處填入伺服器地址,User Name和Password處分別填入你的賬號和密碼,點擊確定。
選擇剛剛添加好的伺服器,點擊Connect,成功連接伺服器。
2
下載WRF安裝包,和WRF的預處理系統WPS(必需)的安裝包。
首先訪問網址:
http://www2.mmm.ucar.e/wrf/users/download/get_source.html
如果是第一次登陸,點擊New Users,否則選Returnning Users。
3
若選了New Users,填寫注冊信息:
4
點擊下一步。
5
下載WRF和WPS源碼包(.tar格式)。
6
下載WPS需要的地理數據包,第二列解壓後約49G,如果磁碟空間緊張,選第三列(如圖)。
7
至此,下載完成,以下將下載好的三個壓縮包上傳到伺服器自己可以訪問的目錄下。(自己電腦為linux系統的跳過)
8
回到Xshell,點擊圖示圖標,打開Xftp。
Xftp界面下,左側找到壓縮包,拖動到右側即可。
以下斜體為Xshell(或linux shell)中輸入的命令!!
Xshell中,進入壓縮包所在的目錄,輸入:tar zxvf WRFV3.6.TAR.gz
或者某些系統中需要分兩條命令:gunzip WRFV3.6.TAR.gz 然後 tar xvf WRFV3.6.TAR。
(小技巧,文件名不需要輸全,輸入頭幾個字母,按下Tab鍵,會自動補齊)
生成WRFV3目錄,ls如下:
WPS 和地理數據用同樣的方法解壓(tar zxvf WPSV3.6.TAR.gz)。其中地理數據在運行模式的時候才需要,編譯安裝用不到,因此本文不講。
cd WRFV3,進入WRF目錄,
ls 查看目錄內容
其中,configure clean compile三個文件為可執行文件。
以下開始編譯WRF
./configure
輸入數字後回車,選擇所用的fortran 和c編譯器(WRF代碼由fortran和c語言寫成)。圖中我用的是AIX系統,用的IBM自己的xlf 和xlc編譯器。
其中serial是單線程運算,運算速度慢,但是編譯簡單,一般不用,初次接觸可嘗試。
dmpar是分布內存式並行,相當於多台電腦組成cluster,每個cpu都有自己的內存。
smpar是共享內存式並行,相當於伺服器中內存和cpu不在一起。
自己具體情況咨詢伺服器管理員,如果是自己的PC,選smpar。
接下來輸入數字選擇模式區域是否嵌套一般選1.
至此configure完成。
configure的作用是生成configure.wrf文件,告訴接下來的compile過程:使用哪些編譯器,編譯器在哪兒,以及編譯過程中使用的工具都在哪,編譯使用哪些編譯參數等等等。
一般configure都能完成,接下來就是compile,也就是編譯過程。
輸入命令:
./compile wrf
或者如果你要模擬實際個例,輸入:
./compile em_real
這一過程一般需要花半小時或更久;還有可能發生各種問題,相應問題需要自己google或者上論壇咨詢。一般需要修改 configure.wrf的內容。另外記得編譯不成功的話,需要 ./clean 刪除上一次編譯生成的中間文件。祝你好運。
如果正常完成,會在main目錄下生成 wrf.exe,如果是編譯的em_real,還會生成real.exe。
至此WRF編譯完成。
以下開始編譯WPS。
首先進入WPS目錄:
類似的:
./configure
然後選擇是否需要並行和是否支持GRIB2格式。這個並行於WRF的並行是獨立的,互不影響。GRIB2格式看自己的資料而定。一般不支持GRIB2的話編譯出問題的可能性小一些。
完成後會生成configure.wps。其中WRF_DIR標識了WRF的目錄,需要WRF正確編譯了,並且路徑正確指定才可以。
接下來是編譯WPS
./compile
正常完成的話會在WPS目錄下生成geogrid.exe ungrib.exe 和 metgrid.exe 三個文件(其實是三個鏈接,比如geogrid.exe是實際存在於geogrid/src/geogrid.exe。是否正常完成編譯以源文件是否存在為准)。
另外,util目錄下會生成若干工具(詳見README文件)。如果某些不能正常生成,也不會影響以後的運行WRF。
至此,當你有了:
WPS/目錄下的 geogrid.exe ungrib.exe 和 metgrid.exe
WRFV3/main/目錄下的wrf.exe 和real.exe
你就完成了WRF的基本編譯安裝,可以愉快的進行下一個步驟:進行模擬運算了。
㈧ AIX系統中xlc和XLC命令怎麼用示範一下,比如Hello.cpp怎麼編譯和執行
BITS=32
INCLDIR=../incl
CC=xlC
CCFLAGS=-qstaticinline -q${BITS} -c -I$(INCLDIR)
$(CC) $(CCFLAGS) hello.cpp
㈨ fortify 如何進行xlC編譯器的掃描
從你的這個補丁文件名就可以看出,是先用tar歸檔後再壓縮的,需要使用的時候反向操作即可。
uncompress vacpp.90.aix61.oct2007.ptf.tar.Z
tar xvf vacpp.90.aix61.oct2007.ptf.tar
然後在安裝此文件
㈩ AIX 6.1環境安裝的xlc 9.0版本編譯器但是不能編譯,求大神指教越詳細越好~
從你的這個補丁文件名就可以看出,是先用tar歸檔後再壓縮的,需要使用的時候反向操作即可。
uncompress vacpp.90.aix61.oct2007.ptf.tar.Z
tar xvf vacpp.90.aix61.oct2007.ptf.tar
然後在安裝此文件