当前位置: 技术问答>linux和unix
请高手来解释下 此error
来源: 互联网 发布时间:2016-10-31
本文导语: check_asm asmalign_pot ".align 3" check_as BEGIN /tmp/ffconf.KJK11117.c 1 void foo(void){ __asm__ volatile(".align 3"); } END /tmp/ffconf.KJK11117.c gcc -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DPIC -fPIC -g -...
check_asm asmalign_pot ".align 3"
check_as
BEGIN /tmp/ffconf.KJK11117.c
1 void foo(void){ __asm__ volatile(".align 3"); }
END /tmp/ffconf.KJK11117.c
gcc -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DPIC -fPIC -g -c -o /tmp/ffconf.Rsc11126.o /tmp/ffconf.KJK11117.c
/tmp/ffconf.KJK11117.c: Assembler messages:
/tmp/ffconf.KJK11117.c:1: Error: alignment not a power of 2
有点看不大懂 __asm__ volatile(".align 3"); 这句是什么意思
__asm__ volatile 这个是宏吗?做什么用的
.align 3 这个参数传进去干什么的
环境: RHEL 5.4 gcc 4.6.0
check_as
BEGIN /tmp/ffconf.KJK11117.c
1 void foo(void){ __asm__ volatile(".align 3"); }
END /tmp/ffconf.KJK11117.c
gcc -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DPIC -fPIC -g -c -o /tmp/ffconf.Rsc11126.o /tmp/ffconf.KJK11117.c
/tmp/ffconf.KJK11117.c: Assembler messages:
/tmp/ffconf.KJK11117.c:1: Error: alignment not a power of 2
有点看不大懂 __asm__ volatile(".align 3"); 这句是什么意思
__asm__ volatile 这个是宏吗?做什么用的
.align 3 这个参数传进去干什么的
环境: RHEL 5.4 gcc 4.6.0
|
__asm__ volatile()
这个是gcc中,嵌入汇编代码的写法。其中volatile用作禁止编译器优化。
.align是一个汇编指示符。是AT&T格式汇编中的内容,表示对齐。我看了LZ代码的上下文,估计这里是希望按照8字节边界对齐。我记得,gcc中使用的这个.align n,它所代的参数有2种解释。第一种是2的n次方,也就是地址最后n位必须为0。第二种,表示字节数。似乎,gcc的各个版本中,要么采取第一种解释,要么第二种。因此算是有歧义的。
既然,.align 3被认为是错误了。建议楼主使用.align 8试试看,也许这个版本的gcc采用了第二种解释。
这里写的内容完全凭影像,没有去查,建议楼主查查gcc手册,和AT&T汇编的相关文档。