Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的带有IACA标记的程序要编译,而不是在我首先编译到汇编时编译?_C_Ubuntu_Gcc_Assembly_Iaca - Fatal编程技术网

为什么我的带有IACA标记的程序要编译,而不是在我首先编译到汇编时编译?

为什么我的带有IACA标记的程序要编译,而不是在我首先编译到汇编时编译?,c,ubuntu,gcc,assembly,iaca,C,Ubuntu,Gcc,Assembly,Iaca,我正在尝试使用我用来设置makers的工具进行一些代码分析。我遇到的问题是,如果我使用gcc并直接从源代码编译到二进制代码,我就没事了。程序可以编译,IACA工作正常。但是,如果我首先使用-S编译为asm,然后在此基础上使用gcc,则会出现以下错误 main.c: Assembler messages: main.c:10: Error: no such instruction: `movl $111,%ebx' main.c:13: Error: no such instruction: `m

我正在尝试使用我用来设置makers的工具进行一些代码分析。我遇到的问题是,如果我使用gcc并直接从源代码编译到二进制代码,我就没事了。程序可以编译,IACA工作正常。但是,如果我首先使用-S编译为asm,然后在此基础上使用gcc,则会出现以下错误

main.c: Assembler messages:
main.c:10: Error: no such instruction: `movl $111,%ebx'
main.c:13: Error: no such instruction: `movl $222,%ebx'
我知道这些是IACA注射的说明。但我不知道为什么在我第一次编译到asm时它们只是一个问题

我想这样做的原因是我希望能够在FORTRAN代码上使用IACA,所以我无法使用c头文件。我应该能够手动将标记放在asm中,但之后无法编译代码

为了澄清,对于我在这里发布的代码,我只使用了头文件,并得到了这个错误。我没有向asm添加任何内容。刚刚编译成asm,然后是二进制

主要条款c:

#include "iacaMarks.h"  
int main()
{
  int i = 0;
  float count = 0.0;

  for(i = 0; i < 123; i++){
    IACA_START
    count+=count;
  }
  IACA_END
}
make all
正常工作,然后IACA接受二进制文件并运行评测<代码>生成asm后接
生成最终版本
将产生上述错误


我在Intel Xeon-2699和gcc 4.9.1上运行64位Ubuntu 14.10。

创建asm文件的gcc命令行使用-masm=Intel,但这些错误行不是Intel格式(它们是at&t格式)。请注意,您的另一个gcc命令没有指定-masm=intel,这意味着它使用默认值(att)。如果有什么方法可以说服IACA输出英特尔格式,这可能会解决您的问题。或者,尝试从gcc行中删除-masm,让它使用att格式。@david,好的。这就澄清了问题。我相信将正确格式的asm直接粘贴到由fortran代码生成的asm中仍然存在问题。我以为我已经把它归结为一个简单的例子,但似乎我错了。这可能是一个单独的问题。虽然创建asm文件的gcc命令行使用-masm=intel,但这些错误行不是英特尔格式(它们是at&t格式)。请注意,您的另一个gcc命令没有指定-masm=intel,这意味着它使用默认值(att)。如果有什么方法可以说服IACA输出英特尔格式,这可能会解决您的问题。或者,尝试从gcc行中删除-masm,让它使用att格式。@david,好的。这就澄清了问题。我相信将正确格式的asm直接粘贴到由fortran代码生成的asm中仍然存在问题。我以为我已经把它归结为一个简单的例子,但似乎我错了。这可能是一个单独的问题。
asm:
        gcc -S main.c -I/home/lavin2/iaca-lin64/include/ -masm=intel
final:
        gcc main.s
all:
        gcc main.c -I/home/lavin2/iaca-lin64/include/