GCC:如何阻止gcc为.o文件创建随机临时文件名

Har*_*Har 1 c gcc ld

我试图使用以下gcc命令编译两个.c文件:

gcc -O0 program1.c program2.c -o output.elf
Run Code Online (Sandbox Code Playgroud)

一切都很好,直到我传入链接器脚本并查看地图文件.

gcc -O0 program1.c program2.c -o output.elf -Xlinker -T memory.ld -Xlinker custom.ld
Run Code Online (Sandbox Code Playgroud)

其中我的custom.ld具有以下内容:

  1 SECTIONS
  2 {
  3   .mysection : {
  4     program2.o
  5   }>mymemory
  6 }
Run Code Online (Sandbox Code Playgroud)

当我查看地图文件时,我得到以下内容:

.data           0x00000720        0x4
 .data          0x00000720        0x4 /tmp/ccW6dzJy.o
                0x00000720                GLOBAL_SHARED_INT
Run Code Online (Sandbox Code Playgroud)

文件名为/tmp/ccW6dzJy.o,这意味着通配符匹配不会发生,因为链接器不会获取该信息.

所以问题是program2.o没有放入mymemory地址,因为我认为罪魁祸首是文件名.

如何让gcc保留文件名,以便ld能够接收到这个?

bre*_*uck 5

运行命令时:

gcc -O0 program1.c program2.c -o output.elf
Run Code Online (Sandbox Code Playgroud)

你告诉编译器"我不需要目标文件,我只想要最终的链接目标."

因此,如果您需要目标文件,请不要这样做.使用-c标志分别编译.c文件到编译器.这将生成具有您期望的名称的单个.o文件.然后执行链接步骤.