gpt4 book ai didi

c - 使用gcc混合多个没有主要功能的目标文件

转载 作者:行者123 更新时间:2023-12-03 10:01:32 24 4
gpt4 key购买 nike

我尝试混合文件。
例如,如果我有file1.o和file2.o,它们都没有主要功能,则le1_file2.o是这些文件的结果。
所以我用了两件事:

链接器和makefile的使用:

linker.ld :

OUTPUT_FORMAT(elf32-i386)

SECTIONS
{
.text : {*(.text)}
.data : {*(.data)}
.rodata : {*(.rodata)}
.bss :
{
*(COMMON)
*(.bss)
}
end = .; _end = .; __end = .;
}

Makefile :
CC =gcc
OBJ = file1.o file2.o

all : file1_file2.o

file1_file2.o: $(OBJ)
ld -m elf_i386 --oformat=binary -Tlinker.ld $^ -o $@

%.o : %.c
@$(CC) -o $@ -c $< -m32 -g -ffreestanding -fno-PIC -fno-stack-protector -Werror

仅使用一个makefile:

Makefile :
 CC =gcc
OBJ = file1.o file2.o

all : file1_file2.o

file1_file2.o: $(OBJ)
$(CC) $^ -o $@ -m32 -g -ffreestanding -fno-PIC -fno-stack-protector -Werror

%.o : %.c
@$(CC) -o $@ -c $< -m32 -g -ffreestanding -fno-PIC -fno-stack-protector -Werror

最佳答案

我已经通过使用找到了解决方案

ar cr Archive all of the object (.o) files into one static library (.a) file. https://helpmanual.io/help/gcc-ar/



使用静态库意味着在链接阶段仅需要拉入一个目标文件。这与在链接过程中让编译器提取多个目标文件(每个函数一个)有关。
这意味着程序不必在项目或目标文件的不同部分上查找每个实体,而只需要引用将实体排序在一起的单个单个归档对象(.a)文件即可。由于拥有一个有序的目标文件,链接该库的程序可以更快地加载。

supported targets: elf64-x86-64 elf32-i386 elf32-iamcu elf32-x86-64 a.out-i386-linux pei-i386 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big pe-x86-64 pe-bigobj-x86-64 pe-i386 plugin srec symbolsrec verilog tekhex binary ihex Report bugs to http://www.sourceware.org/bugzilla/



因此:
ar cr first_second.a first.o second.o

感谢你所做的一切

关于c - 使用gcc混合多个没有主要功能的目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59432428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com