我正在尝试使用TCC将.c
文件转换为.s
文件,但是,我收到错误:tcc: cannot specify multiple files with -c
tcc.exe main.c -c main.S
我该怎么办?
答案 0 :(得分:2)
tcc
没有生成汇编列表的选项。
tcc -c foo.c
将C源文件foo.c
作为输入,并生成二进制对象文件foo.o
。
它也可以将汇编文件作为输入:
tcc -c asm.S
预处理并汇编现有asm.S
文件中的汇编源,并生成目标文件asm.o
。
tcc -c asm.s
类似,但在汇编之前不会对输入文件进行预处理。
手册页说:
TCC选项与gcc选项非常相似。主要区别在于 TCC也可以直接执行生成的程序并给它 运行时参数。
如果tcc有生成汇编列表的选项,那么它肯定会使用与gcc(和许多其他基于Unix的编译器)相同的选项,即-S
- 但是:
$ tcc -S foo.c
tcc: error: invalid option -- '-S'
$
您可以使用objdump
获取各种装配清单:
$ cat foo.c
#include <stdio.h>
int main(void) {
puts("hello");
}
$ tcc -c foo.c
$ objdump -d foo.o
foo.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <main>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 48 81 ec 00 00 00 00 sub $0x0,%rsp
b: 48 8d 05 fc ff ff ff lea -0x4(%rip),%rax # e <main+0xe>
12: 48 89 c7 mov %rax,%rdi
15: b8 00 00 00 00 mov $0x0,%eax
1a: e8 fc ff ff ff callq 1b <main+0x1b>
1f: c9 leaveq
20: c3 retq
$
但是你可以看到你丢失了一些你从编译器生成的汇编列表中获得的信息。 (使用objdump
选项可能会为您提供更多信息。)
我在Linux x86_64系统上使用tcc 0.9.25版。
(雷米亚贝尔发布了similar but less detailed answer但删除了它,我不知道为什么。)