gpt4 book ai didi

linker - 如何将 ld --gc-sections 与 OUTPUT_FORMAT(二进制)一起使用

转载 作者:行者123 更新时间:2023-12-05 05:21:51 25 4
gpt4 key购买 nike

如果我的 GNU ld 链接描述文件有 OUTPUT_FORMAT(binary) ld --gc-sections 命令行标志似乎被忽略了:

$ cat gcs.c
外部无效魔法(无效);
void callmagic(void) { 魔法(); }
int uanswer = 42;
int main(void) { 返回 0; }
$ cat ofbin.scr
输出格式(二进制)
OUTPUT_ARCH(i386)
条目(主要)
章节 {
. = 0x10000;
.text : { *(.text*) }
.data : { *(.data*) *(.rodata*) }
.bss : { *(.bss*); }
}
$猫ofelf.scr
输出格式(elf32-i386)
OUTPUT_ARCH(i386)
条目(主要)
章节 {
. = 0x10000;
.text : { *(.text*) }
.data : { *(.data*) *(.rodata*) }
.bss : { *(.bss*); }
}
$ gcc -m32 -nostdlib -nostartfiles -nodefaultlibs gcs.c -ffunction-sections -fdata-sections -Wl,--gc-sections,--print-gc-sections -Wl,-T,ofelf.scr
/usr/bin/ld:删除文件“/tmp/ccSFoPYg.o”中未使用的部分“.text.callmagic”
/usr/bin/ld:删除文件“/tmp/ccSFoPYg.o”中未使用的部分“.data.uanswer”
/usr/bin/ld:删除文件“/tmp/ccSFoPYg.o”中未使用的部分“.eh_frame”
$ gcc -m32 -nostdlib -nostartfiles -nodefaultlibs gcs.c -ffunction-sections -fdata-sections -Wl,--gc-sections,--print-gc-sections -Wl,-T,ofbin.scr
/tmp/cceXCw2b.o:在函数“callmagic”中:
gcs.c:(.text.callmagic+0x7): 未定义对“魔法”的引用
collect2:错误:ld 返回 1 退出状态

我在 Ubuntu 14.04 上使用 GNU ld 2.24 和 GCC 4.8.4。

我怎样才能使这个 .c 文件编译并与 OUTPUT_FORMAT(binary) 链接,并且 callmagic 的代码被 消除>--gc 部分?

最佳答案

看起来这是不可能的,GNU ld 忽略 --gc-sectionsOUTPUT_FORMAT(binary)

一种可能的解决方法是使用 OUTPUT_FORMAT(elf32-i386) 并对输出 ELF 文件进行后处理,例如使用 objcopy -O binary a.out a.out.bin

关于linker - 如何将 ld --gc-sections 与 OUTPUT_FORMAT(二进制)一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41930865/

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