簡介:
GNU Binutils
一般在解壓后的交叉編譯工具鏈bin目錄下會有很多可執行程序工具,以不同的后綴進行區分,這些不同的后綴代表的意義如下:
ld :GNU鏈接器。
as :GNU匯編器。
gold:一個新的,更快的,僅ELF的鏈接器。
addr2line:將地址轉換為文件名和行號。
ar:用於創建,修改和提取檔案的實用程序。
c++filt:過濾以解編碼編碼的C ++符號。
dlltool:創建用於構建和使用DLL的文件。
elfedit:允許更改ELF格式文件。
gprof:顯示分析信息。
nlmconv:將目標代碼轉換為NLM。
nm:列出目標文件中的符號。
objcopy:復制並轉換目標文件。
objdump:顯示目標文件中的信息。
ranlib:生成指向檔案內容的索引。
readelf:顯示來自任何ELF格式對象文件的信息。
size:列出的對象或歸檔文件的部分的尺寸。
strings:列出文件中的可打印字符串。
strip:丟棄的符號。
windmc:Windows兼容的消息編譯器。
windres:Windows資源文件的編譯器。
不同交叉編譯工具鏈代表的意義
aarch64-elf:64位Armv8 Cortex-A,小端
arrch64-linux-gnu:64位Armv8 Cortex-A,小端
aarch64_be-elf: 64位Armv8 Cortex-A,大端
aarch64_be-linux-gnu:64位Armv8 Cortex-A,大端
arm-eabi:32位Armv7 Cortex-A,軟浮點,低端
arm-linux-gnueabi:32位Armv7 Cortex-A,軟浮點,小端
arm-linux-gnueabihf:32位Armv7 Cortex-A,硬浮點,小端
armeb-eabi:32位Armv7 Cortex-A,軟浮點,大端
armeb-linux-gnueabi:32位Armv7 Cortex-A,軟浮點,大端
armeb-linux-gnueabihf:32位Armv7 Cortex-A,硬浮點,大端
armv8l-linux-gnueabihf:32位Armv8 Cortex-A,硬浮點,小端
Makefile
CROSS_COMPILE =
AS = $(CROSS_COMPILE)as #指定GNU匯編器
LD = $(CROSS_COMPILE)ld #指定gnu連接器
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar #ar:用於創建,修改和提取檔案的實用程序。
NM = $(CROSS_COMPILE)nm #nm:列出目標文件中的符號。
STRIP = $(CROSS_COMPILE)strip #strip:丟棄的符號。
OBJCOPY = $(CROSS_COMPILE)objcopy #objcopy:復制並轉換目標文件。
OBJDUMP = $(CROSS_COMPILE)objdump #objdump:顯示目標文件中的信息。
export AS LD CC CPP AR NM
export STRIP OBJCOPY OBJDUMP
#獲取TOP_PATH
#TOP_PATH = $(shell pwd)
#添加vpath變量
#VPATH = $(TOP_PATH)/DIR
#添加頭文件自動搜索路徑
#CINCLUDES = -I(TOP_PATH)/DIR
CFLAGS := -Wall -O0 -g #$(CINCLUDES)
SAVE_TEMPS := -save-temps
LDFLAGS :=
export CFLAGS LDFLAGS
TOPDIR := $(shell pwd)
export TOPDIR
lpthread :=-lpthread
TARGET := test
obj-y += main.o
#obj-y += tpool.o
#obj-y += b/
#obj-y += cc/
all :
make -C ./ -f $(TOPDIR)/Makefile.build
$(CC) $(LDFLAGS) -o $(TARGET) built-in.o $(lpthread)
clean:
rm -f $(shell find -name "*.o")
rm -f $(shell find -name "*.d")
rm -f $(shell find -name "*.i*")
rm -f $(shell find -name "*.s")
rm -f $(TARGET)
rm -f $(shell find -name "core")
.PHONY:all clean
Makefile.build
PHONY := build
build :
obj-y :=
subdir-y :=
include Makefile
__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y)))
subdir-y += $(__subdir-y)
subdir_objs := $(foreach f,$(subdir-y),$(f)/built-in.o)
cur_objs := $(filter-out %/, $(obj-y))
dep_files := $(foreach f,$(cur_objs),.$(f).d)
PHONY += $(subdir-y)
build : $(subdir-y) built-in.o
$(subdir-y):
make -C $@ -f $(TOPDIR)/Makefile.build
built-in.o : $(cur_objs) $(subdir_objs)
$(LD) -r -o $@ $^
dep_file = .$@.d
%.o : %.c
$(CC) $(SAVE_TEMPS) $(CFLAGS) -Wp,-MD,$(dep_file) -c -o $@ $<
.PHONY : $(PHONY)
