gpt4 book ai didi

gcc - GCC 如何运行它的其他程序?

转载 作者:行者123 更新时间:2023-12-04 14:36:12 25 4
gpt4 key购买 nike

也许标题并没有把问题说得那么准确:我知道当我运行 gcc foo.c 时,GCC 会调用其他为它完成所有工作的子程序,从而生成主 gcc 程序只是一个界面。但这究竟是如何完成的呢?

它是否使用systemexec 或其他一些功能?之所以想知道这个是因为我想基于类似的系统构建一个网络爬虫,其中会有一个接口(interface)程序和几个其他子程序,如 crawldownload.

如果这个问题已经被问过但我没有使用搜索或“具有相似标题的问题”找到它,我很抱歉。

提前谢谢你。

最佳答案

虽然您的问题确实更笼统(并且仅以 gcc 为例),但我的第一个想法是使用 strace 来弄清楚它在做什么。在我的系统 (Ubuntu 11.10/x64) 上,我只是运行 strace,如下所示:

strace -F -o sout gcc -Wall -o test test.c

这显示了 gcc 进程的系统调用,同时跟踪分支 (-F) 并将跟踪的输出发送到 sout。这样做,我可以看到 gcc 在这里调用 vfork(),然后在子进程中调用 execve(),尽管实际程序的源代码可能只需执行一个简单的 fork()/exec()

sout 的相关输出是:

26264 stat("/usr/lib/gcc/x86_64-linux-gnu/4.6.1/cc1", {st_mode=S_IFREG|0755, st_size=11248824, ...}) = 0
26264 access("/usr/lib/gcc/x86_64-linux-gnu/4.6.1/cc1", X_OK) = 0
26264 vfork() = 26265
26264 wait4(26265, <unfinished ...>
26265 execve("/usr/lib/gcc/x86_64-linux-gnu/4.6.1/cc1", ["/usr/lib/gcc/x86_64-linux-gnu/4."..., "-quiet", "-imultilib", ".", "-imultiarch", "x86_64-linux-gnu", "test.c", "-quiet", "-dumpbase", "test.c", "-mtune=generic", "-march=x86-64", "-auxbase", "test", "-Wall", "-fstack-protector", ...], [/* 46 vars */]) = 0

每行的开头是正在运行的进程的pid。所以主进程调用stat()找到cc1,然后fork,子进程执行。

话虽如此,我本可以在没有引用的情况下回答您的问题; fork/exec 是从程序中调用子进程的常用方法。

关于gcc - GCC 如何运行它的其他程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8837696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com