❶ AIX下gcc編譯器怎麼使用動態連接庫
鏈接靜態庫其實從某種意義上來說也是一種粘貼復制,只不過它操作的對象是目標代碼而不是源碼而已。因為靜態庫被鏈接後庫就直接嵌入可執行文件中了,這樣就帶來了兩個問題。
首先就是系統空間被浪費了。這是顯而易見的,想像一下,如果多個程序鏈接了同一個庫,則每一個生成的可執行文件就都會有一個庫的副本,必然會浪費系統空間。
再者,人非聖賢,即使是精心調試的庫,也難免會有錯。一旦發現了庫中有bug,挽救起來就比較麻煩了。必須一一把鏈接該庫的程序找出來,然後重新編譯。
而動態庫的出現正彌補了靜態庫的以上弊端。因為動態庫是在程序運行時被鏈接的,所以磁碟上只須保留一份副本,因此節約了磁碟空間。如果發現了bug或要升級也很簡單,只要用新的庫把原來的替換掉就行了。
❷ unix下C編譯器版本如何查看
常用的編譯器有gcc, clang, c-compiler, xlc(AIX)等。一般他們會綁定到cc(軟連接), 所以你可以查看下cc指向哪個連接,如果遵循GNU語法,那麼看版本就是cc --version. 一個系統可以裝多個版本的多種編譯器,那麼就可以看下$PATH變數中優先哪個生效?當然還有其他編譯器,如intel 廠商的。可以看man XXXX 然後搜 version.
❸ AIX上面C++編譯報錯:0711-224 plicate
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<fstream>
usingnamespacestd;
intmain(){
stringcommand("./a.sh");
command+="aaa.lzo";
FILE*f=popen(command.c_str(),"r");
charbuf[1024];
fgets(buf,1024,f);
cout<<buf<<endl;
pclose(f);
return0;
}
❹ 請問是否有AIX 系統上支持tuxedo的免費C/C++編譯器
在aix上有免費的gcc編譯器安裝(我沒有裝過,但我見別人裝過,而且很好用)
❺ 新手入門:AIX下如何用命令行編譯並執行一個C程序GCC和CC的區別是什麼
謝謝! 明天我去試一下。另外,在AIX下我輸入:gcc -v 想查看GCC版本號,提示GCC不存在,但是輸入:cc -v 則提示IBM XLC的版本信息,不知道這個是什麼原因 ?閣下說得沒錯,果然可以編譯。 不過我還是不太明白 gcc / cc / xlc / c89 他們之間的概念是一個什麼樣的區別,能再說一下嗎 ?謝謝!
❻ AIX上面有默認的C/C++編譯器嗎
Test:/#lslpp -L | grep xlC
xlC.aix50.rte 6.0.0.13 C F C Set ++ Runtime for AIX 5.0
xlC.cpp 6.0.0.0 C F C for AIX Preprocessor
xlC.msg.en_US.cpp 6.0.0.0 C F C for AIX Preprocessor
xlC.msg.en_US.rte 6.0.0.0 C F C Set ++ Runtime
xlC.rte 6.0.0.0 C F C Set ++ Runtime
# lslpp -l | grep vac
vac.C 6.0.0.0 COMMITTED C for AIX Compiler
vac.C.readme.ibm 6.0.0.0 COMMITTED C for AIX iFOR/LS Information
vac.html.en_US.C 6.0.0.0 COMMITTED C for AIX Compiler
vac.lic 6.0.0.0 COMMITTED C for AIX Licence Files
vac.ndi 6.0.0.0 COMMITTED C for AIX Non-Default
vac.pdf.en_US.C 6.0.0.0 COMMITTED C for AIX Documentation
vacpp.cmp.aix50.lib 6.0.0.0 COMMITTED VisualAge C++ Libraries for
vacpp.cmp.aix50.tools 6.0.0.0 COMMITTED VisualAge C++ Tools for AIX
vacpp.cmp.core 6.0.0.0 COMMITTED VisualAge C++ Compiler
vacpp.cmp.include 6.0.0.0 COMMITTED VisualAge C++ Compiler Include
vacpp.cmp.lib 6.0.0.0 COMMITTED VisualAge C++ Libraries
vacpp.cmp.rte 6.0.0.0 COMMITTED VisualAge C++ Compiler
vacpp.cmp.tools 6.0.0.0 COMMITTED VisualAge C++ Tools
vacpp.lic 6.0.0.0 COMMITTED VisualAge C++ Licence Files
vacpp.memdbg.aix50.lib 6.0.0.0 COMMITTED VA C++ User Heap/Memory Debug
vacpp.memdbg.aix50.rte 6.0.0.0 COMMITTED VA C++ User Heap/Memory Debug
vacpp.memdbg.lib 6.0.0.0 COMMITTED VisualAge C++ User Heap and
vacpp.memdbg.rte 6.0.0.0 COMMITTED VisualAge C++ User Heap and
vacpp.ndi 6.0.0.0 COMMITTED VisualAge C++ Non-Default
vacpp.pdf.common 6.0.0.0 COMMITTED VisualAge C++ Documentation
vacpp.pdf.en_US 6.0.0.0 COMMITTED VisualAge C++ Documentation
vacpp.samples.ansicl 6.0.0.0 COMMITTED ANSI CLass Library Samples
vac.C 6.0.0.0 COMMITTED C for AIX Compiler
vacpp.cmp.core 6.0.0.0 COMMITTED VisualAge C++ Compiler
❼ 怎麼確認AIX C/C++ compiler XL C的license是否完成版
使用IBM CICS Transaction Server需要使用AIX XLC C/C++編譯器編譯C語言和C++的應用程序,。AIX上的XLC不是免費的編譯器軟體,需要額外購買license。如果沒有購買license,XLC只能使用60天,過期了就不能編譯。怎麼確定在伺服器上安裝XLC編譯器是完整版還是試用版?
lslpp -l | grep 「vac*」 或者 lslpp -l | grep -i vac
vac.lic 10.1.0.0 COMMITTED XL C for AIX LicenceFiles
vac.licAgreement 10.1.0.0 COMMITTED IBM XL C ElectronicLicense
vacpp.lic 10.1.0.0 COMMITTED IBM XL C/C++ LicenceFiles
vacpp.licAgreement 10.1.0.0 COMMITTED IBM XL C++ ElectronicLicense
查到有以上的fileset就證明你的XLC編譯器為完整版。如果沒有,請先卸載XLC編譯器,再重新安裝完整版的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系統下編譯c或c++源文件,具體說明一下。謝謝各位高手。
用vi test.c編輯一個測試文件,如:
#include <stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}
然後保存退出
輸入 cc test.c其會在當前目錄生成a.out
換名mv a.out test
或者 cc -o test test.c也可