0

我正在尝试使用 TCC 将.c文件转换为.s文件,但是出现错误:tcc: cannot specify multiple files with -c

tcc.exe main.c -c main.S

我该怎么办?

4

1 回答 1

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。

(remyabel 发布了一个类似但不太详细的答案,但删除了它,我不知道为什么。)

于 2014-01-01T21:42:19.380 回答