如果你有一个简单的C程序,像手动运行gcc的步骤,编译,汇编,连接
int main(void) {return 0;}
它可与gcc -o test test.c
进行编译。
据我所知,gcc执行编译,组装和链接。后两个步骤通过运行as
和ld
来实现。
我可以使用gcc -S test.c
生成汇编代码。
你会在终端中输入什么内容,将汇编代码转换为可执行文件?
(这样做的原因是为了学习汇编)
如果你有一个简单的C程序,像手动运行gcc的步骤,编译,汇编,连接
int main(void) {return 0;}
它可与gcc -o test test.c
进行编译。
据我所知,gcc执行编译,组装和链接。后两个步骤通过运行as
和ld
来实现。
我可以使用gcc -S test.c
生成汇编代码。
你会在终端中输入什么内容,将汇编代码转换为可执行文件?
(这样做的原因是为了学习汇编)
这些是使用gcc
gcc -E --> Preprocessor, but don't compile
gcc -S --> Compile but don't assemble
gcc -c --> assemble but don't link
gcc with no switch will link your object files and generate the executable
你做gcc -S -o test.s test.c
,类型gcc -o test test.s
后。
您可以让gcc
启动并停止编辑进程。 gcc test.s -o test
将它从汇编编译test.s
到一个可执行文件。
,因为你可能或可能不知道的不同阶段,编译的四个阶段是进行预处理(-E),编译到组件(-S),组装到对象代码(-c),最后链接。对我来说最困难的是如何使用预处理器输出。下面是如何做到这一点:
gcc -E hello.c | gcc -S -xc -o hello.s -
gcc -c hello.s -o hello.o
gcc hello.o -o hello
实际上,它先执行预处理,然后编译,然后组装,然后链接。预处理可能是该过程的一个重要部分,尤其是在您使用Boost时... – 2011-12-15 22:57:08
您可以使用`-v`参数来查看GCC如何调用其子程序,例如, `gcc -o test test.c -v` – mizo 2011-12-15 23:22:48