几个编译选项的用法和意思



Linux下,我有个名叫做fft.c的C源程序,现在要编译成可执行程序,使用intel composer.于是经过了两个步骤:

1.编译目标文件

icc -c -offload-attribute-target=mic -O3 -openmp -std=c99 -DMKL_ILP64 -I/opt/intel/composer_xe_2013_sp1.1.106/mkl/include fft.c -o fft_new.o

2.连接产生可执行文件

icc fft_new.o -openmp -Wl,--start-group /opt/intel/composer_xe_2013_sp1.2.144/mkl/lib/intel64/libmkl_intel_ilp64.a /opt/intel/composer_xe_2013_sp1.2.144/mkl/lib/intel64/libmkl_intel_thread.a /opt/intel/composer_xe_2013_sp1.2.144/mkl/lib/intel64/libmkl_core.a -Wl,--end-group -Ip-offload-option,mic,compiler,"-Wl,--start-group /opt/intel/composer_xe_2013_sp1.2.144/mkl/lib/mic/libmkl_intel_ilp64.a /opt/intel/composer_xe_2013mkl/lib/mic/libmkl_intel_thread.a /opt/intel/composer_xe_2013_sp1.2.144/mkl/lib/mic/libmkl_core.a -Wl,--end-group" -o fft_new.out

  这里的东西较多,看上去比较复杂。

1.对于第一步,编译出目标文件。这里面的几个编译选项:

-O3 :表示最大可能优化级别。各种循环优化都执行了,并且各种文件级性质也用来改善性能

-openmp:采用了openmp并行编程

-std=c99:ANSI C是89年成为了标准,被ISO认证。之后99年ISO更新了新的C标准。所以-std用来指明编译的C标准。在某些情况下,如果使用GCC,可能在有冲突的时候使用其他标准,比如:-std=gnu89

-DMKL_ILP64:这个是intel提供的编译选项,主要是一个平台的指示。

-I:指定头文件目录

-o:重命名。

2.对于第二步,链接过程。其中几个编译选项:

-openmp:同上

-Wl:Wl选项告诉编译器将后面的参数传递给链接器。

--start-group 和--stop-group:库文件参数传递的开始和结束。

--offload-option,mic:使用offload方式使用协处理器进行运算。




你可能感兴趣的:(coding)