最进遇到一个问题在移植一些 android 上的汇编语言到mac 上应用,整理了一下这里面遇到的问题和涉及的相关知识;
刚接触汇编,整理不对的还请提出;
./test.s:24:16: error: unexpected token in '.section' directive
.section .text
^
./test.s:143:2: error: unknown directive
.end
.section .text
^
./test.s:143:2: error: unknown directive
.end
在mac 上编译 如 test.s 遇到以上问题 ;
编译方法:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -c test.s -o test.o ;
解决方法和相关知识整理:
linux 上编译一个汇编程序;
例如:
一个标准的.c 文件;
#include<stdio.h>
int main(int argc, char **argv){
printf("display\n");
return 0;
}
1. *.c 文件怎么变成可执行文件 ;
gcc -o test test.c
2.怎么将.c 文件生成 汇编文件
gcc -S test.c
3.汇编文件怎么生成.o
gcc -c test.s -o test.o
4.*.o 文件怎么生成可执行文件 ;
gcc -o test test.o
----------------------------------------------------------------------------------------------------------------------------------------------------------
上面的问题是由于mac 上 汇编的语法和 linux 上有几点不同导致;
apple 采用的是 汇编规范为 GNU Assembler
.section .text 去掉 .section 即可;
GAS规范中表示,可以用.global或.globl来标注全局函数。在Apple的Assembler中仅支持.globl
------------------------------------------------------------------------------------------------------------------------------------------------------------
详细的知识请参考:
http://www.cnblogs.com/zenny-chen/archive/2011/10/31/2229731.html
http://oss.org.cn/kernel-book/ch02/2.6.2.htm