GCC:如何阻止 gcc 为 .o 文件创建随机临时文件名
GCC: How to stop gcc from creating random temporary file name for the .o files
我正在尝试使用以下 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 没有放入我的内存地址,因为我认为罪魁祸首是文件名。
如何让 gcc 保留文件名以便 ld 能够获取这个文件?
当您 运行 命令时:
gcc -O0 program1.c program2.c -o output.elf
你是在告诉编译器"I don't need the object files, I just want the final linked target."
因此,如果您需要目标文件,请不要那样做。使用编译器的 -c 标志分别编译 .c 文件。这将生成具有您期望的名称的单个 .o 文件。然后执行 link 步骤。
我正在尝试使用以下 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 没有放入我的内存地址,因为我认为罪魁祸首是文件名。
如何让 gcc 保留文件名以便 ld 能够获取这个文件?
当您 运行 命令时:
gcc -O0 program1.c program2.c -o output.elf
你是在告诉编译器"I don't need the object files, I just want the final linked target."
因此,如果您需要目标文件,请不要那样做。使用编译器的 -c 标志分别编译 .c 文件。这将生成具有您期望的名称的单个 .o 文件。然后执行 link 步骤。