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
然后在安装此文件