为什么在子程序中编译没错执行出错怎么办会报错

EDA考试复习题  (EDA)是指利用计算机辅助设计(CAD)软件,来完成超大规模集成电路(VLSI)芯片的功能设计、综合、验证、物理设计(包括布局、布线、版图、设计规则检查等)等流程的设计方式。EDA考试即将开启序幕,不知道做为考生的你复习好了没?下面小编收集了一些复习题,供大家练习之用。  《EDA技术与项目训练》选择题  1. 一个项目的输入输出端口是定义在 A 。  A. 实体中 B. 结构体中 C. 任何位置 D. 进程体  2. 描述项目具有逻辑功能的是 B 。  A. 实体 B. 结构体 C. 配置 D. 进程  3. 关键字ARCHITECTURE定义的是 A 。  A. 结构体 B. 进程 C. 实体 D. 配置  4. MAXPLUSII中编译VHDL源程序时要求 C 。  A.文件名和实体可不同名 B.文件名和实体名无关 C. 文件名和实体名要相同 D. 不确定  5. 1987标准的VHDL语言对大小写是 D 。  A. 敏感的 B. 只能用小写 C. 只能用大写 D. 不敏感  6. 关于1987标准的VHDL语言中,标识符描述正确的是 A 。  A. 必须以英文字母开头 B.可以使用汉字开头 C.可以使用数字开头 D.任何字符都可以  7. 关于1987标准的VHDL语言中,标识符描述正确的是 B 。  A. 下划线可以连用 B. 下划线不能连用 C. 不能使用下划线 D. 可以使用任何字符  8. 符合1987VHDL标准的标识符是 A 。  A. A_2 B. A+2 C. 2A D. 22  9. 符合1987VHDL标准的标识符是 A 。  A. a_2_3 B. a_____2 C. 2_2_a D. 2a  10. 不符合1987VHDL标准的标识符是 C 。  A. a_1_in B. a_in_2 C. 2_a D. asd_1  11. 不符合1987VHDL标准的标识符是 D 。  A. a2b2 B. a1b1 C. ad12 D. %50  12. VHDL语言中变量定义的位置是 D 。  A. 实体中中任何位置 B. 实体中特定位置 C. 结构体中任何位置 D. 结构体中特定位置  13. VHDL语言中信号定义的位置是 D 。  A. 实体中任何位置 B. 实体中特定位置 C. 结构体中任何位置 D. 结构体中特定位置  14. 变量是局部量可以写在 B 。  A. 实体中 B. 进程中 C. 线粒体 D. 种子体中  15. 变量和信号的描述正确的是 A 。  A. 变量赋值号是:= B. 信号赋值号是:= C. 变量赋值号是<= D. 二者没有区别  16. 变量和信号的描述正确的是 B 。  A. 变量可以带出进程 B. 信号可以带出进程 C. 信号不能带出进程 D. 二者没有区别  17. 关于VHDL数据类型,正确的是 D 。  A. 数据类型不同不能进行运算 B. 数据类型相同才能进行运算  C. 数据类型相同或相符就可以运算 D. 运算与数据类型无关  18. 下面数据中属于实数的是 A 。  A. 4.2 B. 3 C. ‘1’ D. “11011”  19. 下面数据中属于位矢量的是 D 。  A. 4.2 B. 3 C. ‘1’ D. “11011”  20. 关于VHDL数据类型,正确的是 。  A. 用户不能定义子类型 B. 用户可以定义子类型  C. 用户可以定义任何类型的数据 D. 前面三个答案都是错误的  21. 可以不必声明而直接引用的数据类型是 C 。  A. STD_LOGIC B. STD_LOGIC_VECTOR C. BIT D. 前面三个答案都是错误的  22. STD_LOGIG_1164中定义的高阻是字符 D 。  A. X B. x C. z D. Z  23. STD_LOGIG_1164中字符H定义的是 A 。  A. 弱信号1 B. 弱信号0 C. 没有这个定义 D. 初始值  24. 使用STD_LOGIG_1164使用的数据类型时 B 。  A.可以直接调用 B.必须在库和包集合中声明 C.必须在实体中声明 D. 必须在结构体中声明  25. 关于转化函数正确的说法是 。  A. 任何数据类型都可以通过转化函数相互转化 B. 只有特定类型的数据类型可以转化  C. 任何数据类型都不能转化 D. 前面说法都是错误的  26. VHDL运算符优先级的说法正确的是 C 。  A. 逻辑运算的优先级最高 B. 关系运算的优先级最高  C. 逻辑运算的优先级最低 D. 关系运算的优先级最低  27. VHDL运算符优先级的说法正确的是 A 。  A. NOT的优先级最高 B. AND和NOT属于同一个优先级  C. NOT的优先级最低 D. 前面的说法都是错误的  28. VHDL运算符优先级的说法正确的是 D 。  A. 括号不能改变优先级 B. 不能使用括号 C. 括号的优先级最低 D. 括号可以改变优先级  29. 如果a=1,b=0,则逻辑表达式(a AND b) OR( NOT b AND a)的值是 B 。  A. 0 B. 1 C. 2 D. 不确定  30. 关于关系运算符的说法正确的是 。  A. 不能进行关系运算 B. 关系运算和数据类型无关  C. 关系运算数据类型要相同 D. 前面的说法都错误  31. 转换函数TO_BITVECTOR(A)的功能是 。  A. 将STDLOGIC_VECTOR转换为BIT_VECTOR B. 将REAL转换为BIT_VECTOR  C. 将TIME转换为BIT_VECTOR D. 前面的说法都错误  32. VHDL中顺序语句放置位置说法正确的是 。  A.可以放在进程语句中 B. 可以放在子程序中 C. 不能放在任意位置 D. 前面的说法都正确  33. 不属于顺序语句的是 B 。  A. IF语句 B. LOOP语句 C. PROCESS语句 D. CASE语句  34. 正确给变量X赋值的语句是 B 。  A. X<=A+B; B. X:=A+b; C. X=A+B; D. 前面的都不正确  35. EDA的中文含义是 A 。  A. 电子设计自动化 B. 计算机辅助计算 C. 计算机辅助教学 D. 计算机辅助制造  36. 可编程逻辑器件的英文简称是 。 A. FPGA B. PLA C. PAL D. PLD  37. 现场可编程门阵列的英文简称是 。 A. FPGA B. PLA C. PAL D. PLD  38. 基于下面技术的PLD器件中允许编程次数最多的是 。  A. FLASH B. EEROM C. SRAM D. PROM  39. 在EDA中,ISP的中文含义是 。  A. 网络供应商 B. 在系统编程 C. 没有特定意义 D. 使用编程器烧写PLD芯片  40. 在EDA中,IP的中文含义是 。  A. 网络供应商 B. 在系统编程 C. 没有特定意义 D. 知识产权核  41. EPF10K20TC144-4具有多少个管脚 A 。  A. 144个 B. 84个 C. 15个 D. 不确定  42. EPF10K20TC144-X器件,如果X的值越小表示 。  A. 器件的工作频率越小 B. 器件的管脚越少 C. 器件的延时越小 D. 器件的功耗越小  43. 如果a=1,b=1,则逻辑表达式(a XOR b) OR( NOT b AND a)的值是 A 。  A. 0 B. 1 C. 2 D. 不确定  44. 执行下列语句后Q的值等于 B 。  ……  SIGNAL E: STD_LOGIC_VECTOR (2 TO 5);  SIGNAL Q: STD_LOGIC_VECTOR (9 DOWNTO 2);  ……  E<=(2=>’1’, 4=>’0’, OTHERS=>’1’);  Q<=(2=>E (2), 4=>E (3), 5=>’1’, 7=>E (5), OTHERS=>E (4));  ……  A. “11011011” B. “00101101” C. “11011001” D. “00101100”  45. VHDL文本编辑中编译时出现如下的报错信息  Error: VHDL syntax error: signal declaration must have ‘;’,but found begin instead. 其错误原因是 A 。  A. 信号声明缺少分号。B. 错将设计文件存入了根目录,并将其设定成工程。  C. 设计文件的文件名与实体名不一致。 D. 程序中缺少关键词。  46. VHDL文本编辑中编译时出现如下的报错信息  Error: VHDL syntax error: choice value length must match selector expression value length 其错误原因是 A 。  A. 表达式宽度不匹配。 B. 错将设计文件存入了根目录,并将其设定成工程。  C. 设计文件的文件名与实体名不一致。 D. 程序中缺少关键词。  47. MAX+PLUSII的设计文件不能直接保存在 B 。  A. 硬盘 B. 根目录 C. 文件夹 D. 工程目录  48. MAXPLUSII是哪个公司的软件 A 。  A. ALTERA B. ATMEL C. LATTICE D. XILINX  49. MAXPLUSII不支持的输入方式是 D 。  A. 文本输入 B. 原理图输入 C. 波形输入 D. 矢量输入  50. MAXPLUSII中原理图的后缀是 B 。  A. DOC B. GDF C. BMP D. JIF  51. 在一个VHDL设计中Idata是一个信号,数据类型为std_logic_vector,试指出下面那个赋值语句是错误的。 D 。  A.idata <= “00001111”; B.idata <= b”0000_1111”;  C.idata <= X”AB” D. idata <= B”21”;  52. 在VHDL语言中,下列对时钟边沿检测描述中,错误的是 D 。  A.if clk’event and clk = ‘1’ then B.if falling_edge(clk) then  C.if clk’event and clk = ‘0’ then D.if clk’stable and not clk = ‘1’ then  53. 下面对利用原理图输入设计方法进行数字电路系统设计的描述中,那一种说法是不正确的。 。  A.原理图输入设计方法直观便捷,但不适合完成较大规模的电路系统设计;  B.原理图输入设计方法一般是一种自底向上的设计方法;  C.原理图输入设计方法无法对电路进行功能描述;  D.原理图输入设计方法也可进行层次化设计。  54. 在一个VHDL设计中idata是一个信号,数据类型为integer,数据范围0 to 127,下面哪个赋值语句是正确的。 C 。  A.idata := 32; B.idata <= 16#A0#; C.idata <= 16#7#E1; D.idata := B#1010#;  55. 下列那个流程是正确的基于EDA软件的FPGA / CPLD设计流程: A 。  A.原理图/HDL文本输入→功能仿真→综合→适配→编程下载→硬件测试  B.原理图/HDL文本输入→适配→综合→功能仿真→编程下载→硬件测试;  C.原理图/HDL文本输入→功能仿真→综合→编程下载→→适配硬件测试;  D.原理图/HDL文本输入→功能仿真→适配→编程下载→综合→硬件测试  56. 在VHDL语言中,下列对进程(PROCESS)语句的语句结构及语法规则的描述中,正确的是 。  A.PROCESS为一无限循环语句;敏感信号发生更新时启动进程,执行完成后,等待下一次进程启动。 B.敏感信号参数表中,应列出进程中使用的所有输入信号;  C.进程由说明部分、结构体部分、和敏感信号参数表三部分组成;  D.当前进程中声明的信号也可用于其他进程。  57. 对于信号和变量的说法,哪一个是不正确的: A 。  A.信号用于作为进程中局部数据存储单元 B.变量的赋值是立即完成的  C.信号在整个结构体内的任何地方都能适用 D.变量和信号的赋值符号不一样  58. VHDL语言共支持四种常用库,其中哪种库是用户的VHDL设计现行工作库: 。  A.IEEE库 B.VITAL库 C.STD库 D.WORK工作库  59. 下列语句中,不属于并行语句的是: B 。  A.进程语句 B.CASE语句 C.元件例化语句 D.WHEN…ELSE…语句  60. 下面哪一条命令是MAX+PLUSII在时序仿真时执行加载节点的命令? C 。  A. file—>set project to current file B. assign—>pin/location chip  C. node—>enter node from SNF D. file—>create default symbol  61. 在EDA工具中,能将硬件描述语言转换为硬件电路的重要工具软件称为 D 。 A.仿真器 B.综合器 C.适配器 D.下载器  62. VHDL文本编辑中编译时出现如下的报错信息  Error: Can’t open VHDL “WORK” 其错误原因是 B 。  A. 错将设计文件的后缀写成.tdf,而非.vhd 。  B. 错将设计文件存入了根目录,并将其设定成工程。  C. 设计文件的文件名与实体名不一致。  D. 程序中缺少关键词。  63. 在VHDL的CASE语句中,条件句中的“=>”不是操作符号,它只相当与 B 作用。  A. IF B. THEN C. AND D. OR  64. 下面哪一条命令是MAXPLUSII软件中引脚锁定的命令 C 。  A. file—>set project to current file B.node—>enter node from SNF  C. assign—>pin/location chip D. file—>create default symbol]  65. 下列关于信号的说法不正确的是 C 。A . 信号相当于器件内部的一个数据暂存节点。  B. 信号的端口模式不必定义,它的数据既可以流进,也可以流出。  C. 在同一进程中,对一个信号多次赋值,其结果只有第一次赋值起作用。  D. 信号在整个结构体内的任何地方都能适用。  66. 下面哪一个可以用作VHDL中的合法的实体名 D 。  A. OR B. VARIABLE C. SIGNAL D. OUT1  67. VHDL文本编辑中编译时出现如下的报错信息  Error:Line1,File e:muxfilemux21.tdf: TDF syntax error… 其错误原因是 A 。  A. 错将设计文件的后缀写成.tdf 而非.vhd 。  B. 错将设计文件存入了根目录,并将其设定成工程。  C. 设计文件的文件名与实体名不一致。  D. 程序中缺少关键词。  68. 下列关于变量的说法正确的是 A 。  A. 变量是一个局部量,它只能在进程和子程序中使用。  B. 变量的赋值不是立即发生的,它需要有一个δ延时。  C. 在进程的敏感信号表中,既可以使用信号,也可以使用变量。  D. 变量赋值的一般表达式为:目标变量名<= 表达式。  69. 下列关于CASE语句的说法不正确的是 B 。  A. 条件句中的选择值或标识符所代表的值必须在表达式的取值范围内。  B. CASE语句中必须要有WHEN OTHERS=>NULL;语句。  C. CASE语句中的选择值只能出现一次,且不允许有相同的选择值的条件语句出现 。  D. CASE语句执行必须选中,且只能选中所列条件语句中的一条。  70. VHDL中,为目标变量赋值符号是 D 。  A. =: B. = C. <= D.:=  71. 在VHDL中,可以用语句 D 表示检测clock下降沿。  A. clock’ event B. clock’ event and clock=’1’ C. clock=’0’ D. clock’ event and clock=’0’  72.在VHDL的FOR_LOOP语句中的循环变量是一个临时变量,属于LOOP语句的局部量, B 事先声明。 A. 必须 B. 不必 C. 其类型要 D.其属性要  73. 在VHDL中,语句”FOR I IN 0 TO 7 LOOP ”定义循环次数为 A 次。  A. 8 B. 7 C. 0 D.1  74. 在VHDL中,PROCESS结构内部是由 B 语句组成的。  A. 顺序 B. 顺序和并行 C. 并行 D.任何  75. 执行MAX+PLUSII的 C 命令,可以对设计的电路进行仿真。  A.Creat Default Symbol B.Compiler C.Simulator D.Programmer  76. 在VHDL中,PROCESS本身是 C 语句。  A. 顺序 B.顺序和并行 C.并行 D.任何  77. 下面哪一个是VHDL中的波形编辑文件的后缀名 B 。  A. gdf B. scf C. sys D. tdf  78. 在元件例化语句中,用 D 符号实现名称映射,将例化元件端口声明语句中的信号与PORT MAP()中的信号名关联起来。  A. = B. := C. <=>  Q<=(2=>E (2), 4=>E (3), 5=>’1’, 7=>E (5), OTHERS=>E (4));  ……  A. “11011011” B. “00110100” C. “11011001” D. “00101100”  84. 综合是EDA设计流程的关键步骤,综合就是把抽象设计层次中的一种表示转化成另一种表示的过程;在下面对综合的描述中, 是错误的。  A. 综合就是将电路的高级语言转化成低级的,可与FPGA / CPLD的基本结构相映射的网表文件; B. 为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束;  C. 综合可理解为,将软件描述与给定的硬件结构用电路网表文件表示的映射过程,并且这种映射关系不是唯一的。 D. 综合是纯软件的转换过程,与器件硬件结构无关;  85. 关于VHDL中的数字,请找出以下数字中数值最小的一个:  A. 2#1111_1110# B. 8#276# C. 10#170# D. 16#E#E1  86. 以下对于进程PROCESS的说法,正确的是: C 。  A. 进程之间可以通过变量进行通信 B. 进程内部由一组并行语句来描述进程功能  C. 进程语句本身是并行语句 D.一个进程可以同时描述多个时钟信号的同步时序逻辑  87. 进程中的信号赋值语句,其信号更新是 。  A.按顺序完成; B.比变量更快完成;  C.在进程的最后完成; D.以上都不对。  88.关于VHDL中的数字,请找出以下数字中最大的一个: 。  A.2#1111_1110# B.8#276# C. 0#170# D.6#E#E1  89.VHDL语言是一种结构化设计语言;一个设计实体(电路模块)包括实体与结构体两部分,结构体描述 。A.器件外部特性; B.器件的内部功能;C.器件的综合约束;  C.器件外部特性与内部功能。  90.下列标识符中, B 是不合法的标识符。  A. State0 B. 9moon C. Not_Ack_0 D. signal  91.在VHDL中,IF语句中至少应有1个条件句,条件句必须由 表达式构成。  A. BIT B. STD_LOGIC C. BOOLEAN D. INTEGER  92. 在VHDL中 D 不能将信息带出对它定义的当前设计单元。  A. 信号 B. 常量 C. 数据 D. 变量  93.在VHDL中,为定义的信号赋初值,应该使用__D___ 符号。  A. =: B. = C. := D. <=  94.在VHDL中,一个设计实体可以拥有一个或多个 D  A. 设计实体 B. 结构体 C. 输入 D. 输出  95. 执行下列语句后Q的值等于 A 。  ……  SIGNAL E: STD_LOGIC_VECTOR (2 TO 5);  SIGNAL Q: STD_LOGIC_VECTOR (9 DOWNTO 2);  E<=(2=>’1’, 4=>’1’, OTHERS=>’0’);  Q<=(2=>E (2), 4=>E (3), 5=>’1’, 7=>E (5), OTHERS=>E (4)); ……  A. “11011011” B. “00110100” C. “11011001” D. “00101100”  96. 在VHDL的IEEE标准库中,预定义的标准逻辑位STD_LOGIC的数据类型中是用 表示的。 A. 小写字母和数字 B. 大写字母数字 C.大或小写字母和数字 D. 全部是数字  97. 执行MAX+PLUSII的 A 命令,可以为设计电路建立一个元件符号。  A. create default symbol B. simulator C. compiler D. timing analyzer  98. 在VHDL中,条件信号赋值语句WHEN_ELSE属于 语句。  A. 并行和顺序 B. 顺序 C. 并行 D. 不存在的  99. 在VHDL的IEEE标准库中,预定义的标准逻辑数据STD_LOGIC有 C 种逻辑值。  A. 2 B. 3 C. 9 D. 8  100.一个能为VHDL综合器接受,并能作为一个独立的设计单元的完整的VHDL程序成为 。  A. 设计输入 B. 设计输出 C. 设计实体 D. 设计结构  拓展内容  EDA技术布局常用规则  1.我们要注意贴片器件(电阻电容)与芯片和其余器件的最小距离芯片:一般我们定义分立器件和IC芯片的距离0.5~0.7mm,特殊的地方可能因为夹具配置的不同而改变  2.对于分立直插的器件  一般的电阻如果为分立直插的比贴片的距离略大一般在1~3mm之间。注意保持足够的间距(因为加工的麻烦,所以直插的基本不会用)  3.对于IC的去耦电容的摆放  每个IC的电源端口附近都需要摆放去耦电容,且位置尽可能靠近IC的电源口,当一个芯片有多个电源口的时候,每个口都要布置去耦电容。  4.在边沿附近的分立器件  由于一般都是用拼板来做PCB,因此在边沿附近的器件需要符合两个条件,第一就是与切割方向平行(使器件的应力均匀),第二就是在一定距离之内不能布置器件(防止板子切割的时候损坏元器件)  5.如果相邻的焊盘需要相连,首先确认在外面进行连接,防止连成一团造成桥接,同时注意此时的铜线的宽度。  6.焊盘如果在铺通区域内需要考虑热焊盘(必须能够承载足够的电流),如果引线比直插器件的焊盘小的话需要加泪滴(角度小于45度),同样适用于直插连接器的引脚。  7.元件焊盘两边的引线宽度要一致,如果时间焊盘和电极大小有差距,要注意是否会出现短路的现象,最后要注意保留未使用引脚的焊盘,并且正确接地或者接电源。  8. 注意通孔最好不要打在焊盘上。  9.另外就是要注意的是引线不能和板边过近,也不允许在板边铺铜(包括定位孔附近区域)  10.大电容:首先要考虑电容的环境温度是否符合要求,其次要使电容尽可能的远离发热区域【EDA考试复习题】相关文章:EDA考试复习题及答案10-202017年EDA复习题及答案08-22EDA考试复习试题10-20EDA考试复习试题及答案10-20EDA考试复习模拟题10-20EDA的定义10-01eda技术期末考试试卷08-21EDA技术与实践08-08EDA技术与应用11-15

Intel C/C++ Fortran编译器简介
Intel Parallel Studio XE Cluster版C/C++ Fortran编译器,是一种主要针对Inetl平台的高性能编译器,可用于开发复杂且要进行大量计算的C/C++、Fortran程序。
系统当前安装目录为,其下有多种年份版本。官方手册目录为 /opt/intel 。用户可以采用molule命令来设置所需的环境,请参看 [设置编译及运行环境]。
Intel编译器编译C和C++源程序的编译命令分别为icc和icpc;编译Fortran源程序的命令为ifort。icpc命令使用与icc命令相同的编译器选项,利用icpc编译时将后缀为.c和.i的文件看作为C++文件;而利用icc编译时将后缀为.c和.i的文件则看作为C文件。用icpc编译时,总会链接C++库;而用icc编译时,只有在编译命令行中包含C++源文件时才链接C++库。
编译命令格式为:command [options] [@response_file] file1 [file2...],其中response_file为文件名,此文件包含一些编译选项,请注意调用时前面有个@。
在Intel数学库(Intelmath)中的许多函数针对Intel微处理器相比针对非Intel微处理器做了非常大的优化处理。
为了使用Intel数学库中的函数,需要在程序源文件中包含头文件,例如使用实函数:
// real_math.c
#include <stdio.h>
#include <mathimf.h>
int main() {
float fp32bits;
double fp64bits;
long double fp80bits;
long double pi_by_four = 3.141592653589793238/4.0;
// pi/4 radians is about 45 degrees
fp32bits = (float) pi_by_four; // float approximation to pi/4
fp64bits = (double) pi_by_four; // double approximation to pi/4
fp80bits = pi_by_four; // long double (extended) approximation to pi/4
// The sin(pi/4) is known to be 1/sqrt(2) or approximately .7071067
printf("When x = %8.8f, sinf(x) = %8.8f \n", fp32bits, sinf(fp32bits));
printf("When x = %16.16f, sin(x) = %16.16f \n", fp64bits, sin(fp64bits));
printf("When x = %20.20Lf, sinl(x) = %20.20f \n", fp80bits, sinl(fp80bits));
return 0;
}
编译:icc real_math.c
编译错误
C/C++程序编译时的出错信息类似以下:
netlog.c(140): error: identifier "hhh" is undefined
for(int hhh=domain_cnt+1;hhh>TMP;hhh--){
^
netlog.c(156): error: expected an expression
for(int i=0;i<32;i++)for(int j=0;j<256;j++)if(ip1[i][j]!=0)fprintf(fin);
^
Fortran程序编译时的出错信息类似以下:
NOlihm.f90(146): error #6404: This name does not have a type, and must
have an explicit type.
[NPR]
n2nd=0;
npr=0
-----------^
NOlihm.f90(542): remark #8290: Recommended relationship between field width
'W' and the number of fractional digits 'D' in this edit descriptor is 'W>=D+3'.
6060 format(/i2,'-th layer',i2,'-th element: z=',i3,' a=',f9.5/' Ef=',f7.5)
-----------------------------------------------------------------------^
编译错误的格式为:
源文件名(行数): 错误类型:具体说明
源代码,^指示出错位置
错误类型可以为:
Warning:警告,报告对编译有效但也许存在问题的语法,请根据信息及程序本身判断,不一定需要处理。
Error:存在语法或语义问题,必须要处理。
Fatal Error:报告环境错误,如磁盘空间没有了。
Fortran程序运行错误
根据运行时错误代码可以在官方手册中查找对应错误解释。
Intel Parallel Studio XE版重要编译选项
Intel编译器选项分为几类,可以用icc -help 类别查看对应的选项,类别与选项对应关系如下:
advanced
codegen
compatibilityCompatibility,兼容性
component
dataData,数据
deprecated
diagnostics
floatFloating Point,浮点
helpHelp,帮助
inlineInlining,内联
ipo
languageLanguage,语言
link
miscMiscellaneous,杂项
optOptimization,优化
outputOutput,输出
pgo
preprocPreprocessor,预处理
reports
openmp
可以运行icc -help help查看选项分类情况。
优化选项
-fast:最大化整个程序的速度,相当于设置-ipo、-O3、-no-prec-div、-static、-fp-model fast=2和-xHost。这里是所谓的最大化,还是需要结合程序本身使用合适的选项,默认不使用此选项。
-nolib-inline:取消标准库和内在函数的内联展开。
-On:设定优化级别,默认为O2。O与O2相同,推荐使用;O3为在O2基础之上增加更激进的优化,比如包含循环和内存读取转换和预取等,但在有些情况下速度反而慢,建议在具有大量浮点计算和大数据处理的循环时的程序使用。
-Ofast:设定一定的优化选项提高程序性能,设定-O3, -no-prec-div和-fp-model fast=2。在Linux系统上提供与gcc的兼容。
-Os:启用优化,但不增加代码大小,并且产生比-O2优化小的代码。它取消了一些优化不明显却增大了代码的优化选项。
代码生成选项
-axcode:在有性能提高时,生成针对Intel处理器的多特征面向的自动调度代码路径。code可为:
COMMON-AVX512:生成Intel(R) Advanced Vector Extensions 512 (Intel(R) AVX-512)基础指令。
CORE-AVX2:生成IntelAdvanced Vector Extensions 2 (IntelAVX2)、IntelAVX、SSE4.2、SSE4.1、SSE3、SSE2、SSE和SSSE3指令。
CORE-AVX-I:生成Float-16转换指令和RDRND(随机数)指令、IntelAdvanced Vector Extensions (IntelAVX)、IntelSSE4.2、SSE4.1、SSE3、SSE2、SSE和SSSE3指令。
AVX:生成IntelAdvanced Vector Extensions (IntelAVX)、IntelSSE4.2、SSE4.1、SSE3、SSE2、SSE和SSSE3指令。
SSE4.2:生成IntelSSE4.2、SSE4.1、SSE3、SSE2、SSE和SSSE3指令。
SSE4.1:生成IntelSSE4.1、SSE3、SSE2、SSE和SSSE3指令
SSSE3:生成SSSE3指令和IntelSSE3、SSE2和SSE指令。
SSE3:生成IntelSSE3、SSE2和SSE指令。
SSE2:生成IntelSSE2和SSE指令。
-fexceptions、-fno-exceptions:是否生成异常处理表。
-xcode:设置启用编译目标的特征,包含采取何种指令集和优化。
COMMON-AVX512
CORE-AVX2
CORE-AVX-I
AVX
SSE4.2
SSE4.1
SSSE3
SSE3
SSE2
-mcode:需要生成目标特征的指令集。code可为:
avx:生成IntelAdvanced Vector Extensions (IntelAVX)、IntelSSE4.2、SSE4.1、SSE3、SSE2、SSE和SSSE3指令。
sse4.2:生成IntelSSE4.2、SSE4.1、SSE3、SSE2、SSE和SSSE3指令。
sse4.1:生成IntelSSE4.1、SSE3、SSE2、SSE和SSSE3指令。
ssse3:生成SSSE3指令和IntelSSE3、SSE2和SSE指令。
sse3:生成IntelSSE3、SSE2和SSE指令。
sse2:生成IntelSSE2和SSE指令。
sse:已过时,现在与ia32一样。
ia32:生成与IA-32架构兼容的x86/x87通用代码。取消任何默认扩展指令集,任何之前的扩展指令集。并且取消所有面向特征的优化及指令。此值仅在Linux系统上使用IA-32架构时有效。
-m32和-m64:生成IA-32或Intel64位代码,默认由主机系统设定。
-march=processor:生成支持某种处理器特定特征的代码。processor可为:
generic
core-avx2
core-avx-i
-mtune=processor:针对特定处理器优化。processor可为:
generic(默认)
core-avx2
core-avx-i
-xHost:生成编译主机处理器能支持的最高指令集。
过程间优化(IPO)选项
-ip:在单个文件中进行过程间优化(Interprocedural Optimizations-IPO)。
-ip-no-inlining:禁止过程间优化时启用的全部和部分内联。
-ip-no-pinlining:禁止过程间优化时启用的部分内联。
-ipo[n]、-no-ipo:是否在多文件中进行过程间优化,非负整数n为可生成的对象文件数。
-ipo-c:在多文件中进行过程间优化,并生成一个对象文件。
-ipo-jobsn:指定在过程间优化的链接阶段时的命令(作业)数。
-ipo-S:在多文件中进行过程间优化,并生成一个汇编文件。
-ipo-separate:在多文件中进行过程间优化,并为每个文件分别生成一个对象文件。
高级优化选项
-funroll-all-loops:即使在循环次数不确定的情况下也展开所有循环。默认为否。
-guide[=n]:设置自动向量化、自动并行及数据变换的指导级别。n为1到4,1为标准指导,4为最高指导,如果n忽略,则默认为4。默认为不启用。
-guide-data-trans[=n]:设置数据变换时的指导级别。n为1到4,1为标准指导,4为最高指导,如果n忽略,则默认为4。默认为不启用。
-guide-file[=filename]:将自动并行的结果输出到文件filename中。
-guide-file-append[=filename]:将自动并行的结果追加到文件filename中。
-guide-par[=n]:设置自动并行的指导级别。n为1到4,1为标准指导,4为最高指导,如果n忽略,则默认为4。默认为不启用。
-guide-vec[=n]:设置自动向量化的指导级别。n为1到4,1为标准指导,4为最高指导,如果n忽略,则默认为4。默认为不启用。
-mkl[=lib]:链接时自动链接Intel MKL库,默认为不启用。lib可以为:
parallel:采用线程化部分的MKL库链接,此为lib如果没指明时的默认选项。
sequential:采用未线程化的串行MKL库链接。
cluster:采用集群部分和串行部分MKL链接。
-simd、-no-simd:是否启用SIMD编译指示的编译器解释。
-unroll[=n]:设置循环展开的最大层级。
-unroll-aggressive、-no-unroll-aggressive:设置对某些循环执行激进展开。默认不启用。
-vec、-no-vec:是否启用向量化。默认启用。
概要导向优化(PGO)选项
优化报告选项
-qopt-report[=n]:设定显示优化报告信息的级别,为每个对象文件生成一个对应的文件。n为0(不显示)到5(最详细)。
-qopqopt-report-file=keyword:设定报告文件名。keyword可以为:
filename:保存输出的文件名。
stderr:输出到标准错误输出。
stdout:输出到标准输出。
-qopt-report-filter=string:设置报告的过滤器。string可以为filename、routine、range等。
-qopt-report-format=keyword:设置报告的格式。keyword可以为text和vs,分别对应纯文本和Visual Studio格式。
-qopt-report-help:显示使用-qopt-report-phase选项时可用于报告生成的各优化阶段,并显示各级别报告的简短描述。
-qopt-report-per-object:为各对象文件生成独立的报告文件。
-qopt-report-phase:对生成的优化报告指明一个或多个优化阶段。phase可以为:cg、ipo、loop、openmp、par、pgo、tcollect、vec和all等。
-qopt-report-routine=substring:让编译器对含有substring的子程序生成优化报告。
-qopt-report-names=keyword:是否在优化报告中显示重整的或未重整的名字。keyword可以为:mangled和unmangled。
-tcheck:对线程应用启用分析。
-tcollect[lib]:插入测试探测调用Intel Trace Collector API。lib为一种Intel Trace Collector库,例如:VT、VTcs、VTmc或VTfs。
-tcollect-filterfilename:对特定的函数启用或禁止测试。
-vec-report[=n]:设置向量化诊断信息详细程度。n为0(不显示)到7(最详细)。
OpenMP和并行处理选项
-fmpc-privatize、-fno-mpc-privatize:是否启用针对多处理器计算环境(MPC)所有静态数据私有。
-par-affinity=[modifier,…]type[,permute][,offset]:设定线程亲和性。
modifier:可以为以下值之一:granularity=fine|thread|core、[no]respect、[no]verbose、[no]warnings、proclist=proc_list。默认为granularity=core, respect, noverbose。
type:指示线程亲和性。此选项是必需的,并且需为以下之一:compact、disabled、explicit、none、scatter、logical、physical。默认为none。logical和physical已经过时。分别使用compact和scatter,并且没有permute值。
permute:非负整数。当type设置为explicit、none或disabled时,不能使用此选项。默认为0。
offset:非负整数。当type设置为explicit、none或disabled时,不能使用此选项。默认为0。
-par-num-threads=n:设定并行区域内的线程数。
-par-reportn:设定自动并行时诊断信息的显示级别。n可以为0到5。
-par-runtime-controln、-no-par-runtime-control:设定是否对符号循环边界的循环执行运行时检查代码。
-par-schedule-keyword[=n]:设定循环迭代的调度算法。keyword可以为:
auto:由编译器或者运行时系统设定调度算法。
static:将迭代分割成连续块。
static-balanced:将迭代分割成偶数大小的块。
static-steal:将迭代分割成偶数大小的块,但允许线程从临近线程窃取部分块。
dynamic:动态获取迭代集。
guided:设定迭代的最小值。
guided-analytical:使用指数分布或动态分布分割迭代。
runtime:直到运行时才设定调度分割。
n为每个迭代数或块大小。此设置,只能配合static、dynamic和guided使用。
-par-thresholdn:设定针对循环自动并行的阈值。n为一个在0到100间的整数,限定针对循环自动并行的阈值:
-parallel:让自动并行器针对可以安全并行执行的循环生成多线程代码。
-parallel-source-info=n、-no-parallel-source-info:设定当生成OpenMP或自动并行代码是否显示源位置。n为显示级别:
-qopenmp:编译OpenMP程序。注意:在一般只能在同一个节点内的CPU上运行OpenMP程序。
-qopenmp-lib=type:设定链接时使用的OpenMP运行时库。当前type只能设定为compat。
-qopenmp-link=library:设定采用动态还是静态链接OpenMP运行时库。library可以为static和dynamic,分别表示静态和动态链接OpenMP运行时库。
-qopenmp-reportn:设定OpenMP并行器的诊断信息的显示级别。n可以为0、1和2。
-qopenmp-simd、-no-qopenmp-simd:设定是否启用OpenMP SIMD编译。
-qopenmp-stubs:使用串行模式编译OpenMP程序。
-qopenmp-task=model:设定OpenMP的任务模型。model可以为:
-qopenmp-threadprivate=type:设定OpenMP线程私有的实现。type可以为:
浮点选项
-fast-transcendentals:让编译器使用超越函数代替,超越函数是较快但精度较低的实现。
-fimf-absolute-error=value[:funclist]:定义对于数学函数返回值允许的最大绝对误差的值。value为正浮点数,funclist为函数名列表。如:-fimf-absolute-error=0.00001:sin,sinf。
-fimf-accuracy-bits=bits[:funclist]:定义数学函数返回值的相对误差,包含除法及开方。bits为正浮点数,指明编译器应该使用的正确位数,funclist为函数名列表。如:-fimf-accuracy-bits=23:sin,sinf。bits与ulps之间的变换关系为:\(ulps=2^{p-1-bits}\),其中\(p\)为目标格式尾数\(bits\)的位数(对应单精度、双精度和长双精度分别为23、53和64)。
-fimf-max-error=ulps[:funclist]:定义对于数学函数返回值的最大允许相对误差,包含除法及开方。value为正浮点数,指定编译器可以使用的最大相对误差,funclist为函数名列表,如:-fimf-max-error=4.0:sin,sinf。
-fimf-precision[=value[:funclist]]:当设定使用何种数学库函数时,定义编译器应该使用的精度。value可以为:
high:等价于max-error = 0.6
medium:等价于max-error = 4
low:等价于accuracy-bits = 11(对单精度)和accuracy-bits = 26(对双精度)
funclist为函数名列表,如: -fimf-precision=high:sin,sinf。
-fma、-no-fma:是否对存在融合乘加(fused multiply-add-FMA)的目标处理器启用融合乘加。此选项只有在-x或-march参数设定CORE-AVX2或更高时才有效。
-fp-model keyword:控制浮点计算的语义,keyword可以为:
precise:取消浮点数据的非值安全优化。
fast[=1|2]:对浮点数据启用更加激进的优化。
strict:启用精度和异常,禁止收缩,启用编译指示stdc和fenv_access。
source:四舍五入中间结果到源定义精度。
double:四舍五入中间结果到53-bit(双)精度。
extended:四舍五入中间结果到64-bit(扩展)精度。
[no-]except:定义严格浮点异常编译指令是否启用。
keyword可以分成以下三组使用:
precise, fast, strict
source, double, extended
except
-fp-port、-no-fp-port:是否对浮点操作启用四舍五入。
-fp-speculation=mode:设定推测浮点操作时使用的模式。mode可以为:
-fp-trap=mode[,mode,…]:设置主函数的浮点异常捕获模式。mode可以为:
[no]divzero:是否启用被0除时的IEEE捕获。
[no]inexact:是否启用不精确结果时的IEEE捕获。
[no]invalid:是否启用无效操作时的IEEE捕获。
[no]overflow:是否启用上溢时的IEEE捕获。
[no]underflow:是否启用下溢时的IEEE捕获。
[no]denormal:是否启用非正规时的IEEE捕获。
all:启用上述所有的IEEE捕获。
none:禁止启用上述所有的IEEE捕获。
common:启用最常见的IEEE捕获:被0除、无效操作和上溢。
-fp-trap-all=mode[,mode,…]:设置所有函数的浮点异常捕获模式。mode可以为:
[no]divzero:是否启用被0除时的IEEE捕获。
[no]inexact:是否启用不精确结果时的IEEE捕获。
[no]invalid:是否启用无效操作时的IEEE捕获。
[no]overflow:是否启用上溢时的IEEE捕获。
[no]underflow:是否启用下溢时的IEEE捕获。
[no]denormal:是否启用非正规时的IEEE捕获。
all:启用上述所有的IEEE捕获。
none:禁止启用上述所有的IEEE捕获。
common:启用最常见的IEEE捕获:被0除、无效操作和上溢。
-ftz:赋值非常规操作结果为0。
-mp1:提高浮点操作的精度和一致性。
-pcn:设定浮点尾数精度。n可以为:
-prec-div、-no-prec-div:是否提高浮点除的精度。
-prec-sqrt、-no-prec-sqrt:是否提高开根的精度。
-rcd:启用快速浮点数到整数转换。
内联选项
-gnu89-inline:设定编译器在C99模式时使用C89定义处理内联函数。
-finline、-fno-inline:是否对__inline声明的函数进行内联,并执行C++内联。
-finline-functions、-fno-inline-functions:对单个文件编译时启用函数内联。
-finline-limit=n:设定内联函数的最大数。n为非负整数。
-inline-calloc、-no-inline-calloc:是否设定编译器内联调用calloc()为调用malloc()和memset()。
-inline-factor、-no-inline-factor:是否设定适用于所有内联选项定义的上限的比例乘法器。
-inline-level=n:设定内联函数的展开级别。n可以为0、1、2.
输出、调试及预编译头文件(PCH)选项
-c:仅编译成对象文件(.o文件)。
-debug [keyword]:设定是否生成调试信息。keyword可以为:
none:不生成调试信息。
full或all:生成完全调试信息。
minimal:生成最少调试信息。
[no]emit_column:设定是否针对调试生成列号信息。
[no]expr-source-pos:设定是否在表达式粒度级别生成源位置信息。
[no]inline-debug-info:设定是否针对内联代码生成增强调试信息。
[no]macros:设定是否针对C/C++宏生成调试信息。
[no]pubnames:设定是否生成DWARF debug_pubnames节。
[no]semantic-stepping:设定是否生成针对断点和单步的增强调试信息。
[no]variable-locations:设定是否编译器生成有助于寻找标量局部变量的增强型调试信息。
extended:设定关键字值semantic-stepping和variable-locations。
[no]parallel:设定是否编译器生成并行调试代码指令以有助于线程数据共享和可重入调用探测。
-g:包含调试信息。
-g0:禁止生成符号调试信息。
-gdwarf-n:设定生成调试信息时的DWARF版本,n可以为2、3、4。
-o file:指定生成的文件名。
-pch:设定编译器使用适当的预编译头文件。
-pch-create filename:设定生成预编译头文件。
-pch-dir dir:设定搜索预编译头文件的目录。
-pch-use filename:设定使用的预编译头文件。
-print-multi-lib:打印哪里系统库文件应该被发现。
-S:设定编译器只是生成汇编文件但并不进行链接。
预处理选项
-Bdir:设定头文件、库文件及可执行文件的搜索路径。
-Dname[=value]:设定编译时的宏及其值。
-dD:输出预处理的源文件中的#define指令。
-dM:输出预处理后的宏定义。
-dN:与-dD类似,但只输出的#define指令的宏名。
-E:设定预处理时输出到标注输出。
-EP:设定预处理时输出到标注输出,忽略#line指令。
-gcc、-no-gcc、-gcc-sys:判定确定的GNU宏(__GNUC__、__GNUC_MINOR__和__GNUC_PATCHLEVEL__)是否定义。
-gcc-include-dir、-no-gcc-include-dir:设定是否将gcc设定的头文件路径加入到头文件路径中。
-H:编译时显示头文件顺序并继续编译。
-I:设定头文件附加搜索路径。
-icc、-no-icc:设定Intel宏(__INTEL_COMPILER)是否定义。
-idirafterdir:设定dir路径到第二个头文件搜索路径中。
-imacros filename:允许一个头文件在编译时在其它头文件前面。
-iprefix prefix:指定包含头文件的参考目录的前缀。
-iquote dir:在搜索的头文件路径前面增加dir目录以供那些使用引号而不是尖括号的文件使用。
-isystemdir:附加dir目录到系统头文件的开始。
-iwithprefixdir:附加dir目录到通过-iprefix引入的前缀后,并将其放在头文件目录末尾的头文件搜索路径中。
-iwithprefixbeforexdir:除头文件目录dir放置的位置与-I声明的一样外,与-iwithprefix类似。
-M:让编译器针对各源文件生成makefile依赖行。
-MD:预处理和编译,生成后缀为.d包含依赖关系的输出文件。
-MFfilename:让编译器在一个文件中生成makefile依赖信息。
-MG:让编译器针对各源文件生成makefile依赖行。与-M类似,但将缺失的头文件作为生成的文件。
-MM:让编译器针对各源文件生成makefile依赖行。与-M类似,但不包含系统头文件。
-MMD:预处理和编译,生成后缀为.d包含依赖关系的输出文件。与-M类似,但不包含系统头文件。
-MP:让编译器对每个依赖生成伪目标。
-MQtarget:对依赖生成改变默认目标规则。target是要使用的目标规则。与-MT类似,但引用特定Make字符。
-MTtarget:对依赖生成改变默认目标规则。target是要使用的目标规则。
-nostdinc++:对C++不搜索标准目录下的头文件,而搜索其它标准目录。
-P:停止编译处理,并将结果写入文件。
-pragma-optimization-level=interpretation:指定如没有前缀指定时,采用何种优化级别编译指令解释。interpretation可以为:
Intel:Intel解释。
GCC:GCC解释。
-Uname:取消某个宏的预定义。
-undef:取消所有宏的预定义。
-X:从搜索路径中去除标准搜索路径。
C/C++语言选项
-ansi:与gcc的-ansi选项兼容。
-check=keyword[, keyword…]:设定在运行时检查某些条件。keyword可以为:
[no]conversions:设定是否在转换成较小类型时进行检查。
[no]stack:设定是否在堆栈帧检查。
[no]uninit:设定是否对未初始化变量进行检查。
-fno-gnu-keywords:让编译器不将typeof作为一个关键字。
-fpermissive:让编译器允许非一致性代码。
-fsyntax-only:让编译器仅作语法检查,不生成目标代码。
-funsigned-char:将默认字符类型变为无符号类型。
-help-pragma:显示所有支持的编译指令。
-intel-extensions、-no-intel-extensions:是否启用Intel
C和C++语言扩展。
-restrict、-no-restrict:设定是否采用约束限定进行指针消岐。
-std=val:val可以为c89、c99、gnu89、gnu++89或c++0x,分别对应相应标准。
-stdlib[=keyword]:设定链接时使用的C++库。keyword可以为:
-strict-ansi:让编译器采用严格的ANSI一致性语法。
-x type:type可以为c、c++、c-header、cpp-output、c++-cpp-output、assembler、assembler-with-cpp或none,分别表示c源文件等,以使所有源文件都被认为是此类型的。
-Zp[n]:设定结构体在字节边界的对齐。n是字节大小边界,可以为1、2、4、8和16。
Fortran语言选项
-auto-scalar:INTEGER、REAL、COMPLEX和LOGICAL内在类型变量,如未声明有SAVE属性,将分配到运行时堆栈中,下次调用此函数时变量赋值。
-allow
keyword:设定编译器是否允许某些行为。keyword可以为[no]fpp_comments,声明fpp预处理器如何处理在预处理指令行中的Fortran行尾注释。
-altparam、-noaltparam:设定是否允许不同的语法(不带括号)PARAMETER声明。
-assume keyword[, keyword…]:设定某些假设。keyword可以为:none、[no]bscc、[no]buffered_io、[no]buffered_stdout、[no]byterecl、[no]cc_omp、[no]dummy_aliases、[no]fpe_summary、[no]ieee_fpe_flags、[no]minus0、[no]old_boz、[no]old_ldout_format、[no]old_logical_ldio、[no]old_maxminloc、[no]old_unit_star、[no]old_xor、[no]protect_constants、[no]protect_parens、[no]realloc_lhs、[no]source_include、[no]std_intent_in、[no]std_minus0_rounding、[no]std_mod_proc_name、[no]std_value、[no]underscore、[no]2underscores、[no]writeable-strings等
-ccdefault keyword:设置文件显示在终端上时的回车类型。keyword可以为:
none:设定编译器使用无回车控制预处理。
default:设定编译器使用默认回车控制设定。
fortran:设定编译器使用通常的第一个字符的Fortran解释。如字符0使得在输出一个记录时先输出一个空行。
list:设定编译器记录之间出输出换行。
-check=keyword[, keyword…]:设定在运行时检查某些条件。keyword可以为:
none:禁止所有检查。
[no]arg_temp_created:设定是否在子函数调用前检查实参。
[no]assume:设定是否在测试在ASSUME指令中的标量布尔表达式为真,或在ASSUME_ALIGNED指令中的地址对齐声明的类型边界时进行检查。
[no]bounds:设定是否对数组下标和字符子字符串表达式进行检查。
[no]format:设定是否对格式化输出的数据类型进行检查。
[no]output_conversion:设定是否对在指定的格式描述域内的数据拟合进行检查。
[no]pointers:设定是否对存在一些分离的或未初始化的指针或为分配的可分配目标时进行检查。
[no]stack:设定是否在堆栈帧检查。
[no]uninit:设定是否对未初始化变量进行检查。
all:启用所有检查。
-cpp:对源代码进行预处理,等价于-fpp。
-extend-source[size]:指明固定格式的Fortran源代码宽度,size可为72、80和132。也可直接用-72、-80和-132指定,默认为72字符。
-fixed:指明Fortran源代码为固定格式,默认由文件后缀设定格式类别。
-free:指明Fortran源程序为自由格式,默认由文件后缀设定格式类别。
-nofree:指明Fortran源程序为固定格式。
-implicitnone:指明默认变量名为未定义。建议在写程序时添加implicit none语句,以避免出现由于默认类型造成的错误。
-names keyword:设定如何解释源代码的标志符和外部名。keyword可以为:
lowercase:让编译器忽略标识符的大小写不同,并转换外部名为小写。
uppercase:让编译器忽略标识符的大小写不同,并转换外部名为大写。
as_is:让编译器区分标识符的大小写,并保留外部名的大小写。
-pad-source、-nopad-source:对固定格式的源码记录是否采用空白填充行尾。
-stand keyword:以指定Fortran标准进行编译,编译时显示源文件中不符合此标准的信息。keyword可为f03、f90、f95和none,分别对应显示不符合Fortran
2003、90、95的代码信息和不显示任何非标准的代码信息,也可写为-stdkeyword,此时keyword不带f,可为03、90、95。
-standard-semantics:设定编译器的当前Fortran标准行为是否完全实现。
-syntax-only:仅仅检查代码的语法错误,并不进行其它操作。
-wrap-margin、-no-wrap-margin:提供一种在Fortran列表输出时禁止右边缘包装。
-us:编译时给外部用户定义的函数名添加一个下划线,等价于-assume
underscore,如果编译时显示_函数找不到时也许添加此选项即可解决。
数据选项
共有选项
-fcommon、-fno-common:设定编译器是否将common符号作为全局定义。
-fpic、-fno-pic:是否生成位置无关代码。
-fpie:类似-fpic生成位置无关代码,但生成的代码只能链接到可执行程序。
-mcmodel=mem_model:设定生成代码和存储数据时的内存模型。mem_model可以为:
small:让编译器限制代码和数据使用最开始的2GB地址空间。对所有代码和数据的访问可以使用指令指针(IP)相对地址。
medium:让编译器限制代码使用最开始的2GB地址空间,对数据没有内存限制。对所有代码的访问可以使用指令指针(IP)相对地址,但对数据的访问必须采用绝对地址。
large:对代码和数据不做内存限制。所有访问都得使用绝对地址。
-mlong-double-n:覆盖掉默认的长双精度数据类型配置。n可以为:
64:设定长双精度数据为64位。
80:设定长双精度数据为80位。
C/C++专有选项
-auto-ilp32:让编译器分析程序设定能否将64位指针缩成32位指针,能否将64位长整数缩成32位长整数。
-auto-p32:让编译器分析程序设定能否将64位指针缩成32位指针。
-check-pointers=keyword:设定编译器是否检查使用指针访问的内存边界。keyword可以为:
-check-pointers-danglingkeyword:设定编译器是否对悬挂(dangling)指针参考进行检查。keyword可以为:
-fkeep-static-consts、-fno-keep-static-consts:设定编译器是否保留在源文件中没有参考的变量分配。
Fortran专有选项
-convert [keyword]:转换无格式数据的类型,比如keyword为big_endian和little_endian时,分别表示无格式的输入输出为big_endian和little_endian格式,更多格式类型,请看编译器手册。
-double-size size:设定DOUBLE PRECISION和DOUBLE COMPLEX声明、常数、函数和内部函数的默认KIND。size可以为64或128,分别对应KIND=8和KIND=16。
-dyncom “common1,common2,…”:对指定的common块启用运行时动态分配。
-fzero-initialized-in-bss、-fno-zero-initialized-in-bss:设定编译器是否将数据显式赋值为0的变量放置在DATA块内。
-intconstant、-nointconstant:让编译器使用FORTRAN 77语法设定整型常数的KIND参数。
-integer-size size:设定整型和逻辑变量的默认KIND。size可以为16、32或64,分别对应KIND=2、KIND=4或KIND=8。
-no-bss-init:让编译器将任何未初始化变量和显式初始化为0的变量放置在DATA块。默认不启用,放置在BSS块。
-real-size size:设定实型变量的默认KIND。size可以为32、64或18,分别对应KIND=4、KIND=8或KIND=16。
-save:强制变量值存储在静态内存中。此选项保存递归函数和用AUTOMATIC声明的所有变量(除本地变量外)在静态分配中,下次调用时可继续用。默认为-auto-scalar,内在类型INTEGER、REAL、COMPLEX和LOGICAL变量分配到运行时堆栈中。
-zero、-nozero:是否将所有保存的但未初始化的内在类型INTEGER、REAL、COMPLEX或LOGICAL的局部变量值初始为0。
编译器诊断选项
-diag-type=diag-list:控制显示的诊断信息。type可以为:
enable:启用一个或一组诊断信息。
disable:禁用一个或一组诊断信息。
error:让编译器将诊断信息变为错误。
warning:让编译器将诊断信息变成警告
remark:让编译器将诊断信息变为备注。
diag-list可为:driver、port-win、thread、vec、par 、openmp 、warn、error 、remark 、cpu-dispatch 、id[,id,…] 、tag[,tag,…]等。
-traceback、-notraceback:编译时在对象文件中生成额外的信息使得在运行出错时可以提供源文件回朔信息。
-w:编译时不显示任何警告,只显示错误。
-wn:设置编译器生成的诊断信息级别。n可以为:
0:对错误生成诊断信息,屏蔽掉警告信息。
1:对错误和警告生成诊断信息。此为默认选项。
2:对错误和警告生成诊断信息,并增加些额外的警告信息。
3:对备注、错误和警告生成诊断信息,并在级别2的基础上再增加额外警告信息。建议对产品使用此级别。
4:在级别3的基础上再增加一些警告和备注信息,这些增加的信息一般可以安全忽略。
-Wabi、-Wno-abi:设定生成的代码不是C++ ABI兼容时是否显示警告信息。
-Wall:编译时显示警告和错误信息。
-Wbrief:采用简短方式显示诊断信息。
-Wcheck:让编译器在对特定代码在编译时进行检查。
-Werror:将所有警告信息变为错误信息。
-Werror-all将所有警告和备注信息变为错误信息。
-Winline:设定编译器显示哪些函数被内联,哪些未被内联。
-Wunused-function、-Wno-unused-functio:设定是否在声明的函数未使用时显示警告信息。
-Wunused-variable、-Wno-unused-variable:设定是否在声明的变量未使用时显示警告信息。
兼容性选项
-f66:使用FORTRAN 66标准,默认为使用 Fortran 95标准。
-f77rtl、-nof77rtl: 是否使用FORTRAN 77运行时行为,默认为使用Intel Fortran运行时行为。控制以下行为:
当unit没有与一个文件对应时,一些INQUIRE说明符将返回不同的值:
PAD= 对格式化输入默认为”NO’。
NAMELIST和列表输入的字符串必需用单引号或双引号分隔。
当处理NAMELIST输入时:
-fpscomp [keyword[, keyword…]]、-nofpscomp:设定是否某些特征与IntelFortran或Microsoft* Fortran PowerStation兼容。keyword可以为:
none:没有选项需要用于兼容性。
[no]filesfromcmd:设定当OPEN声明中FILE=说明符为空时的兼容性。
[no]general:设定当Fortran PowerStation和IntelFortran语法存在不同时的兼容性。
[no]ioformat:设定列表格式和无格式IO时的兼容性。
[no]libs:设定可移植性库是否传递给链接器。
[no]ldio_spacing:设定是否在运行时在数值量后字符值前插入一个空白。
[no]logicals:设定代表LOGICAL值的兼容性。
all:设定所有选项用于兼容性。
-fabi-version=n:设定使用指定版本的ABI实现。n可以为:
-gcc-name=name:设定使用的gcc编译器的名字。
-gxx-namename:设定使用的g++编译器的名字。
链接和链接器选项
-Bdynamic:在运行时动态链接所需要的库。
-Bstatic :静态链接用户生成的库。
-cxxlib[=dir]、-cxxlib-nostd、-no-cxxlib:设定是否使用gcc提供的C++运行时库及头文件。dir为gcc二进制及库文件的顶层目录。
-Idir:指明头文件的搜索路径。
-Ldir:指明库的搜索路径。
-lstring:指明所需链接的库名,如库名为libxyz.a,则可用-lxyz指定。
-no-libgcc:禁止使用特定gcc库链接。
-nodefaultlibs:禁止使用默认库链接。
-nostartfiles:禁止使用标准启动文件链接。
-nostdlib:禁止使用标准启动和库文件链接。
-pie、-no-pie:设定编译器是否生成需要链接进可执行程序的位置独立代码
-pthread:对多线程启用pthreads库。
-shared:生成共享对象文件而不是可执行文件,必须在编译每个对象文件时使用-fpic选项。
-shared-intel:动态链接Intel库。
-shared-libgcc:动态链接GNU libgcc库。
-static:静态链接所有库。
-static-intel:静态链接Intel库。
-static-libgcc:静态链接GNU libgcc库。
-static-libstdc++:静态链接GNU libstdc++库。
-u symbol:设定指定的符号未定义。
-v:显示驱动工具编译信息。
-Wa,option1[,option2,…]:传递参数给汇编器进行处理。
-Wl,option1[,option2,…]:传递参数给链接器进行处理。
-Wp,option1[,option2,…]:传递参数给预处理器。
-Xlinker option:将option信息传递给链接器。
其它选项
-help [category]:显示帮助。
-sox[=keyword[,keyword]]、-no-sox:设定是否让编译时在生成的可执行文件中保存编译选项和版本等信息,也可以指定是否保存子程序等信息。
存储的信息可以使用以下方法查看:
-V:显示版本信息。
–version:显示版本信息。
-watch[=keyword[, keyword…]]、-nowatch:设定是否在控制台显示特定信息。keyword可以为:

我要回帖

更多关于 编译没错执行出错怎么办 的文章

 

随机推荐