不同平台编译器区别及迁移注意事项_第1页
不同平台编译器区别及迁移注意事项_第2页
不同平台编译器区别及迁移注意事项_第3页
不同平台编译器区别及迁移注意事项_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、不同平台编译器区别及迁移注意事项简介:    Sun Studio编译器支持sun公司出产的sparc处理器,及x86体系机构的处理器。目前最新版本为5.10,5.3以后的版本对C语言c89、c99标准都支持。可以通过-xc99指定编译器按特定c语言标准编译。    XL C/C+是基于标准的命令行编译器,用于在基于 POWER 处理器的系统上运行的 UNIX操作系统AIX,也有linux版本。XL C/C+ 不仅使用 IBM POWER、POWER3 和 POWER4 的功能,而且还添加了对新的 POWER5 和 POWER 970

2、 处理器的支持。    由于各平台cpu指令集都不一样,往往相应平台专属编译器对指令的优化时最好的,如果没有特殊要求,建议使用本平台编译器。gcc编译器是跨平台编译器,对于指令的优化没有专属编译器做的好,但是目前cpu处理速度可以弥补这方面的缺陷,也就说优化与不优化程序的执行时间相差不会太大,那么为了减少因编译器的不同导致编译时带来的工作量,可以使用gcc编译器。    如果使用c语言作为开发语言,那么不同编译器间的迁移不会带来很大的麻烦,因为c语言标准到c99后没有再做大规模的更新。编译器都是按照标准来编译c代码的。 &#

3、160;  如果使用c+语言作为开发语言,不同编译器间的迁移就会带来一些问题,尤其对模版的支持,各编译器有很大差别。相同点:    -c 编译为目标文件,不连接。    -S 编译为汇编代码。-Dname=definition. 在命令行上定义宏,有两种方式,-Dname或者-Dname=definition.在命令行上设置宏定义的目的主要是为了在调试的时候设定一些开关,而在发布的时候再关闭或者打开这些开关即可,当然宏定义也用来对代码进行有选择地编译.另外也还有其他的一些作用。-Uname 取消宏定义name,作用

4、和上面的正好相反。-Idir.  把dir加到头文件的搜索路径中。-llibrary 在连接的时候搜索library库。-Ldir. 把dir加到库文件的搜索路径中。、-o outfile  指定输出文件的文件名。-g 产生供gdb调试用的可执行文件。-Rplst将动态库搜索路径生成到可执行文件中。-E 对源文件进行预处理,并将结果发送到stdout。-H 打印包含文件的路径名称-mt 编译和链接多线程代码。编译静态库:        ar cr libmyfun.

5、a fun.o        -c 如果存档文件不存在,则创建,并不显示ar发出的警告。-r  向存档文件中插入.o文件,替换已有的任何同名文件,新成员添加到文档末尾。注意:solaris上如果同一目录下既有动态库,又有静态库,连接时使用的动态库文件。区别:Sun Studio查询编译器版本    cc V指定按那个版本的c标准进行编译:    使用c99标准        c

6、c -c -xc99=%all     使用c89标准        cc -c -xc99=%none指示编译器执行更严格的语义检查    cc c -v-xO 设置优化级别。编译动态库:    编译源程序:        cc c fun.c        cc c main.c生成动态库:&#

7、160;       cc G o libmyfun.so fun.o    连接为可执行程序:        cc o demo mian.o L. lmyfun    程序运行时,需要将动态库文件的路径加载到环境变量LD_LIBRARY_PATH中。xlc    查看版本        xlc qvers

8、ion    指定使用哪种C语言标准        -qlanglvl=stdc89        -qlanglvl=stdc99    创建动态库        xlc -qmkshrobj -o big_lib.so lib_a.o lib_b.o lib_c.o    设置优化级别 

9、;       xlc myprogram.c -O3    设置警告级别        xlc myprogram.c -qinfo=allgcc查询编译器版本:    gcc v指定使用哪种C语言标准:-std=standard  设置采用的标准,该选项是针对C语言的,比如-std=c99表示编译器遵循C99标准.-W设置警告,可以设置的警告开关很多,通常用-Wall开启所有的警告。-O 设置

10、优化级别,level可以是0,1,2,3或者s,默认为-O0,即不进行优化处理。编译动态库:    编译源程序:        gcc c fun.c        gcc c main.c    生成动态库:        gcc shared fPCI o libmyfun.so fun.o   

11、;     -shared 该选项指定生成动态连接库。-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。    连接为可执行程序:        gcc o demo main.o L. lmyfun    程序运行时,需要将动态库文件的路径加载到环境变量LD_LIBRARY_PATH中。迁移注意事项主要考虑一下技

12、术点:              32位还是64位,CPU类型,CPU字节序,第三方依赖库,操作系统的选择,编译器的选择还有代码分析       32位还是64位              Solaris 与 AIX都是64位的。    &

13、#160;  CPU              Sun平台使用的是SPARC芯片,aix使用的是power芯片。都支持CPU大端字节序。       第三方依赖库分析以前平台使用的软件如tuxedo,oracle,还有一些开源库,如果在AIX都有安装版本,就没有问题。       操作系统的选择   

14、0;          如果程序中大量使用系统函数、进程间通信、信号量、共享内存,需要检查操作系统支持的Unix标准。目前大多数Unix系统都符合Posix.1和Posix.2的某个版本。如果程序中使用Posix线程或者system v IPC,那么新的操作系统对这些都应该支持。如果不支持,应该分析修改代码的代价。       编译器的选择       需要根据开发程序时使用的c语言标准,选择编译器。Sun平台编译器为Sun Studio,IBM平台的编译器为xlc,跨平台编译器

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论