【发布时间】:2012-01-16 01:39:51
【问题描述】:
假设您的程序由两个源文件(main.c 和辅助.c)和两个头文件(declarations.h 和辅助.h)组成。
然后你运行编译器如下:
$gcc main.c auxiliary.c -o myprogram
问题 1:编译器会为我的程序创建一个目标文件(即,只是缺少库)还是会创建两个目标文件,每个源文件一个(然后链接一切都在一起)?
问题 2:是否需要单独调用链接器?因为如果您使用上面的命令,编译器会为您解决这个问题,对吧?
问题 3:为什么有些库会自动链接(例如,stdio)以及为什么有些需要额外的工作(例如,math.h 需要在编译时添加 -lm)。 -lm 代表什么?
问题 4:假设您有一个源文件并且您的程序不需要任何外部库。这是否意味着您从编译器获得的目标代码已经可以执行? (即,像 $gcc -c main.c 一样编译它)。
【问题讨论】:
-
这些东西是特定于每个实现的。用“C”和“compilers”等通用标签标记它是不合适的,因为它指的是“the”C 编译器。
-
同意。我将其重新命名为“关于 GCC 编译器的问题”
标签: c compiler-construction gcc