Chinaunix

标题: C与ARM汇编混合编程(arm-elf-ld生成最终文件) [打印本页]

作者: 2195113    时间: 2008-10-31 21:08
标题: C与ARM汇编混合编程(arm-elf-ld生成最终文件)

                1.去找开发包
  .arm-elf-gcc
  .arm-elf-binutils
  .arm-elf-uClibc
  
  我找的都是rpm包,直接装上即可(中间花了很多时间来搞这个环境,最后才找到这三个包,
  中间一度想自己编译uClibc),它们缺省是装在/opt/uClinux下面的。
2.源程序
  max.c
  -----
  #include
  extern int max2(int a,int b);
  int main(){
    int a=18;
    int b=15;
    printf("The maximum of %d and %d is %d\n",a,b,max2(a,b));
    return 0;
  }
  max2.s
  -------
    .text
    .align 2
    .global max2
  max2:   
    cmp r0,r1
    bhi done
    mov r0,r1
  done:    mov pc,lr
3.makefile (自己写的,不太美观)
LDDIR1 = /opt/uClinux/lib/gcc-lib/arm-elf/2.95.3
LDDIR2 = /opt/uClinux/arm-elf/lib
all: max.o max2.o
    arm-elf-ld -L$(LDDIR2) -L$(LDDIR1) -e main -elf2flt -o max.elf \
        /opt/uClinux/lib/gcc-lib/arm-elf/2.95.3/crtbegin.o \
        /opt/uClinux/arm-elf/lib/crt0.o \
        max.o max2.o \
        /opt/uClinux/lib/gcc-lib/arm-elf/2.95.3/crtend.o \
        -lc -lgcc -lc
max.o:
    arm-elf-gcc -c max.c
max2.o:
    arm-elf-as -o max2.o max2.s
.PHONY: clean
clean:
    -rm -f max.elf max.o max2.o
4. 有个疑问: 就是 arm-elf-ld的库为什么要用两个 -lc? (不用第二个-lc会报 "..._uClibc_main_...abort..."这样的错误
5. 用skyeye运行不了,用arm-elf-gdb调试不了。
   最后下载到板子上,能运行。看来是uClibc的原因,只能在板子上运行.
6. rpm的使用
   rpm -qa | grep 包名字串   //查询是否安装这个包
   rpm -ql 包名(包括版本号的) //查下这个包安装在哪里
   rpm -e  包名             //删除已安装的包.
   
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/26390/showart_1356061.html




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2