我正在尝试使用以下gcc命令编译两个.c文件:
gcc -O0 program1.c program2.c -o output.elf
一切正常,直到我传入链接描述文件并查看地图文件。
gcc -O0 program1.c program2.c -o output.elf -Xlinker -T memory.ld -Xlinker custom.ld
我的custom.ld具有以下内容:
1 SECTIONS
2 {
3 .mysection : {
4 program2.o
5 }>mymemory
6 }
当我查看地图文件时,我得到以下内容:
.data 0x00000720 0x4
.data 0x00000720 0x4 /tmp/ccW6dzJy.o
0x00000720 GLOBAL_SHARED_INT
其中文件名为/tmp/ccW6dzJy.o,这意味着由于链接器无法获取该信息,因此无法进行通配符匹配。
所以问题是program2.o没有放入mymemory地址,因为我认为罪魁祸首是文件名。
如何让gcc保留文件名,以便ld能够接收到这个?
答案 0 :(得分:5)
运行命令时:
gcc -O0 program1.c program2.c -o output.elf
您告诉编译器“我不需要目标文件,我只想要最终的链接目标。”
因此,如果您需要目标文件,请不要这样做。使用-c标志分别编译.c文件到编译器。这将生成具有您期望的名称的单个.o文件。然后执行链接步骤。