aixxlc编译
① 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编译器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
③ 如何在AIX系统下编译c或c++源文件,具体说明一下。谢谢各位高手。
如果你有myprogram.cpp文件,那么使用xlC myprogram.cpp 就可以编译了,默认生成输出文件名为a.out,
如果要指定输出文件,可以使用xlC myprogram.cpp -o myprogram,这样就可以生成名字为myprogram的文件
④ AIX 6.1环境安装的xlc 9.0版本编译器但是不能编译,求大神指教越详细越好~
从你的这个补丁文件名就可以看出,是先用tar归档后再压缩的,需要使用的时候反向操作即可。
uncompress vacpp.90.aix61.oct2007.ptf.tar.Z
tar xvf vacpp.90.aix61.oct2007.ptf.tar
然后在安装此文件
⑤ 怎么确认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的疑问
AIX 全名为(Advanced Interactive Executive),它是IBM 公司的UNIX操作系统,整个系统的设计从网络、主机硬件系统,到操作系统完全遵守开放系统的原则。
下面对AIX 作以介绍。
RS/6000 采用IBM 的UNIX操作系统-AIX作为其操作系统。这是一个目前操作系统界最成功,应用领域最广,最开放的第二代的UNIX系统。它特别适合于做关键数据处理(CRITICAL)。
AIX 包含了许多IBM 大型机传统受欢迎的特征,如系统完整性,系统可管理性和系统可用性。
在 AIX 操作系统上,有许多的数据库和开发工具,用户除了选用已有的应用软件外,还可以根据各自的需要进行开发。
此外,在AIX 之上,有一组功能强,使用方便的系统管理工具。对于异种平台互存,互操作有很成熟的解决方案。
由于该 UNIX 的先进的内核技术和最好的开放性,因此,虽然RS/6000从宣布到今天只有短短的5 年多的时间,它已在各行各业有了广泛的运用,并在1993和1994年连续二年在MIDRANGE商用 UNIX 领域处于第一位。
RISC SYSTEM/6000的操作系统是AIX ,它是性能卓越的、开放的UNIX,汇集了多年来计算机界在UNIX上的研究成果,以IBM 在计算机体系结构、操作系统方面40多年极其丰富的经验。最大限度的使用RISC技术,安装了象AIX 这样的具备工业界实力的UNIX操作系统。
它既可连接SAA 体系结构,又能与非IBM 系统的网络相连,因此,可以和多数专业银行现有的系统实现互连,这对今后业务系统拓展将带来极大的灵活性,并降低投资。
AIX 遵循一系列的国际标准:
* IEEE POSIX1004.1-1990
* X/OPEN 移植指南ISSUE3的基本级(XPG3)
* AES/OS REVISION A (OSF/1 LEVEL 2 资格)
* FIPS 151-1
* AIX的编译器: XLC、C++(可选)、FORTRAN(可选)、PASCAL(可选)、COBOL(可选)
* ADA 的编译器已达到XPG3“成员”级的认可。
* AIX 支持多用户、多任务。
AIX有一些其它特性包括:
AIX 提供了3 种SHELL :SYSTEM V的KORN、BOURNE SHELL和4.3BSDC SHELL作为可选择的UNIX系统界面;
安全设施满足TCB (Trusted Computing Base)的C2级;实时处理能力,这对于“面向交易”的应用至关重要(如零售业和银行等),它使RS/6000 获得极高的响应和吞吐量;
虚拟存储管理,当需要时,可将一些不常用的模块转送至外存,提高内存的可利用性。
先进的文件系统,使得系统管理更加有效,并提高了数据可靠性以及完整性。
能兼容DOS 应用程序和数据。
InfoExplorer,快速信息超文本索引系统- 不仅包括文字,而且对包含声音、图像的索引系统,这是个联机的文件接口。包括全部的超文本的索引和查找,以及面向任务和坐标的多重导引和索引系统。这个文字及图形索引系统以一个灵活的、基于任务的方式去使用详细资料及培训资料。
高级系统管理工具(SMIT,System Management Interface Tool)。提供一级菜单驱动程序,诸如完成软件的安装与设置、设备的设置及管理、问题的测定、存贮管理等。可以自动地进行I/O 设备设置,ASCII 终端也可充当系统控制台。在LAN 上可以进行远程系统的安装。
性能特点
AIX 5L 是AIX的当前使用版本,它支持IBM POWER 和Intel 64位(IA-64)平台。“L” 指Linux affinity
虚拟服务器
通过在AIX 5L V5.2中引入动态逻辑分区(DLPAR),IBM为基于POWER4的p系列系统提供了高级的灵活性和可扩展性功能。
LPAR功能使得在一个单一p系列服务器上运行AIX 5L和Linux的多个独立操作系统映像成为可能。逻辑分区不需要与系统的组建模块(资源集合)的物理边界相一致。LPAR允许客户以更小的粒度从整个可用资源池中选择组件,从而能够增加运行的灵活性。一个p系列分区所要求的最少资源包括一个处理器、256MB内存以及一个I/O适配器。
利用DLPAR,客户可以"在一个服务器的内部创建多个虚拟服务器",并能够从活动分区中动态地添加和删除处理器、物理内存和I/O插槽-每个分区都与其它分区相隔离,而且每个分区都运行自己的AIX 5L V5.2操作系统;添加和删除操作都是在分区环境的内部进行,而且不要求重新执行系统引导。客户可以将系统资源分配给应用程序最需要的地方,在根据不断变化的系统优先级和资源需求进行调整的同时,能够将多个分区上的负载整合到一个单一服务器上。此外,客户在完成这些工作的同时,能够将运行、服务和支持水平保持在所要求的级别上。
运行效率和容量规划
为提供更高的灵活性、可扩展性和可用性,AIX 5L V5.2在p650, p670和p690系统上推出了动态随需应变容量升级(CUoD)功能。
CUoD允许客户在进行系统安装时安装比初始需要数量更多的处理器,保持这些处理器(处于休眠状态)直至业务的增长要求将其激活。CUoD选项将为系统管理员提供一个用于激活更多处理器的加密密钥,可以在不中断系统运行的情况下将新激活的处理器动态分配给各个分区。
CUoD提高了系统可用性。当一个处理器的出错频率到达一个错误阀值(尽管发生这种情况的可能性很小),AIX 5L V5.2将以透明的方式激活一个可用的CUoD处理器并使用它来替换故障处理器-直至客户准备好修复计划为止。此外,即使是单处理器分区也可以支持这一被称为动态处理器备用(Dynamic Processor Sparing)的功能,这一功能允许系统在保持处理能力不变的情况下继续运行,能够保证系统的性能和可用性不会受到影响。
集群管理
为实现快速同步和协调响应,集群环境要求节点之间能够进行全面的协作。AIX 5L使用基于AIX 5L的Linux软件和IBM集群系统管理器(CSM)支持和优化集群服务器的管理。CSM为指定p系列和IBM eServer x系列服务器的安装、配置、维护和更新提供了一个单一的控制点。基于AIX 5L的CSM以安装选项和单独许可产品的形式,包括在AIX 5L V5.2基本安装介质之中。
高可靠性
利用自身的软件,HACMP可以实现 双机切换,确保高稳定性的实现。
Linux亲和性
AIX 5L与Linux之间的亲和性可以帮助以速度更快、成本更低的方式实现跨AIX和Linux平台的多平台集成解决方案。对于很多在Linux上开发或为Linux开发的应用,只需对源代码进行一次简单的重编译,它们就可以在AIX 5L上运行。IBM免费为客户提供一个用于Linux应用的AIX工具箱,该工具箱由一组多个Linux版本中常见的开放源代码和GNU软件组成。因为这些应用运行在AIX上,所以公司可以将Linux的灵活性与AIX的高级功能结合在一起-这些高级功能包括先进的负载管理、完善的系统管理工具以及可扩展性和安全性功能。
安全性
通过C2级认证的AIX 5L提供并全面使用了强大的行业标准安全技术和目录技术。AIX 5L V5.2包括和扩展了这些技术,它提供了对可拔插身份验证模块(PAM)、基于用户的PKI证书、企业身份映射(EIM)、BIND V9、SNMP V3、移动IPv6、无限访问协议(WAP)v1.1、OpenSSH v3.4的集成支持,并支持新的基于AES(Rijndael)、SEAL、Mars、Twofish和其它算法的加密解密库。此外,AIX 5L V5.2继续支持IBM网络身份验证服务器(NAS)、IBM目录服务器v4.1和ICSA认证IPsec/VPN安全组网功能。AIX 5L V5.2提供的Java安全技术包括JAAS、JCE/JCE、JSSE、JGSS和J-PKI。
⑦ 新手入门:AIX下如何用命令行编译并执行一个C程序GCC和CC的区别是什么
谢谢! 明天我去试一下。另外,在AIX下我输入:gcc -v 想查看GCC版本号,提示GCC不存在,但是输入:cc -v 则提示IBM XLC的版本信息,不知道这个是什么原因 ?
⑧ AIX系统中xlc和XLC命令怎么用示范一下,比如Hello.cpp怎么编译和执行
BITS=32
INCLDIR=../incl
CC=xlC
CCFLAGS=-qstaticinline -q${BITS} -c -I$(INCLDIR)
$(CC) $(CCFLAGS) hello.cpp
⑨ 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++ $^