免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1168 | 回复: 0
打印 上一主题 下一主题

C与ARM汇编混合编程(arm-elf-ld生成最终文件) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-31 21:08 |只看该作者 |倒序浏览

                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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP