0

我正在尝试为一个简单的 hello world 程序生成汇编语言列表

我跑了gcc -S file.c

并生成了file.s。

我正在使用生成的 .s 文件使用以下脚本:

#!/bin/bash -x

NAME=file1

for i in *.s; do
        as -o ${i%.s}.o $i
done
ld -static -o $NAME *.o
objdump -D $NAME

当我使用这个时,我得到一个错误:

In function `main':
(.text+0x16): undefined reference to `printf'

任何帮助将不胜感激。

4

1 回答 1

1

编译gcc -fverbose-asm -S -Wall(也许还有-Oor -O2

会在汇编器中-fverbose-asm生成一些有用的注释。

用于gcc -v了解程序是如何链接的。您需要启动代码(例如 some crt0.o)并且您需要链接libc.so.6orlibc.a至少。

在编译和链接gcc -v中间步骤时,会显示隐式目标文件和库。gcc只是启动其他程序,例如cc1(适当的编译器)和as(汇编程序)和ld链接器。有时collect2是一种链接器。

顺便说一句,您可以编写一些汇编代码并通过它使用它gcc。例如,只用汇编语言编写一个例程,其余的用 C 语言编写。然后运行gcc -v -Wall routine.s main.c -o prog

另请阅读Linux 程序集 HowTo

于 2013-05-30T04:50:22.123 回答