假设你的程序由两个源文件(main.c和auxiliary.c)和两个头文件(declarations.h和auxiliary.h)组成。关于GCC编译器和链接器的问题
然后你运行编译如下:
$gcc main.c auxiliary.c -o myprogram
问题1:请问编译器创建一个单一的目标文件为我的计划(即,只是库丢失),还是会创建两个对象文件,每个源文件一个(然后将所有内容链接在一起)?
问题2:有没有必要单独调用链接器?因为如果你使用上面的命令,编译器会为你处理这个问题,对吧?
问题3为什么一些库自动链接(例如,stdio)以及为什么一些库需要额外的工作(例如,math.h需要在编译时添加-lm)。 -lm代表什么?
问题4:假设你有一个源文件,并且你的程序不需要任何外部库。这是否意味着您将从编译器获得的对象代码已经可执行了? (即,编译它像$ gcc -c main.c)。
这东西是特定于每个实现。像使用“C”和“编译器”这样的通用标签来标记它并不合适,就像引用“the”C编译器一样。 –
同意。我重新命名为“有关GCC编译器的问题” –