❶ 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也可