为什么我的带有IACA标记的程序要编译,而不是在我首先编译到汇编时编译?
我正在尝试使用我用来设置makers的工具进行一些代码分析。我遇到的问题是,如果我使用gcc并直接从源代码编译到二进制代码,我就没事了。程序可以编译,IACA工作正常。但是,如果我首先使用-S编译为asm,然后在此基础上使用gcc,则会出现以下错误为什么我的带有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
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/