ARM裸奔程序如何调用库函数

来源:互联网 发布:济宁胜通软件 编辑:程序博客网 时间:2024/05/22 10:40

转自韦东山 嵌入式linux应用开发完全手册


1. 在当前目下建立文件夹为include 和lib 分别放置头文件和实现文件

include : ctype.h*  gcclib.h*  kernel.h*  stdio.h*  string.h*  system.h*  types.h*

lib: ctype.c*  div64.S*      Makefile*  printf.c*  string.c*    vsprintf.h*  div64.h*  lib1funcs.S*  muldi3.c*  printf.h*  vsprintf.c*

2.上层makefile为:

CC      = arm-linux-gcc
LD      = arm-linux-ld
AR      = arm-linux-ar
OBJCOPY = arm-linux-objcopy
OBJDUMP = arm-linux-objdump


INCLUDEDIR := $(shell pwd)/include                                                                                       @得到当前目录(pwd)下的include目录  :$(函数 参数)格式执行
CFLAGS := -Wall -O2
CPPFLAGS   := -nostdinc -I$(INCLUDEDIR)                                                                          @指定不使用标准头文件,使用-I指定的头文件
LDFLASG         := -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc       @指定使用的库,其中$(..)为提取当前工具链里边gcc库的路径


export CC LD OBJCOPY OBJDUMP INCLUDEDIR CFLAGS CPPFLAGS


objs := head.o init.o nand.o interrupt.o adc_ts.o serial.o main.o lib/libc.a


adc_ts.bin: $(objs)
${LD} -Tadc_ts.lds -o adc_ts_elf $^ ${LDFLASG}
${OBJCOPY} -O binary -S adc_ts_elf $@
${OBJDUMP} -D -m arm adc_ts_elf > adc_ts.dis


.PHONY : lib/libc.a                                      @.PHONY表示是不存在依赖文件的动作
lib/libc.a:
cd lib; make; cd ..                         @跳转到当前目录的lib库去执行make命令,再跳转回来(去lib目录执行makefile生成.a库)

%.o:%.c
${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<


%.o:%.S
${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<


clean:
make  clean -C lib
rm -f adc_ts.bin adc_ts_elf adc_ts.dis *.o


3.lib中Makefile 为

objs := div64.o lib1funcs.o ctype.o muldi3.o printf.o string.o vsprintf.o


libc.a: $(objs)
${AR} -r -o $@ $^

%.o:%.c
${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<


%.o:%.S
${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<


clean:
rm -f libc.a *.o

原创粉丝点击