特别说明:如果没有指定链接文件,gcc XXX.o -o AAA(包含链接过程,链接器也是用 ld )链接阶段就会使用gcc默认链接文件
gcc -c XXX.c:-c表示只编译不链接,此指令生成 XXX.o 目标文件
gcc main.o hello.o factorial.o -o XXX:链接成可执行文件 XXX
总结:编译只关心路径下是否存在 " 调用函数对应的头文件 ",链接需要把 “ 函数实现对应的目标文件 " 作为参数
main.cpp 文件的内容
#include<stdio.h> #include "functions.h" int main() { print_hello(); printf(" "); printf("The factorial of 5 is %d ", factorial(5)); return 0; }
hello.cpp 文件的内容
#include <stdio.h> void print_hello(){ printf("hello world"); }
factorial.cpp 文件的内容
#include <stdio.h> int factorial(int n){ if(n != 1){ return (n*factorial(n-1)); }else{ return 1; } }
functions.h 内容
void print_hello(); int factorial(int n);
main.o: main.cpp functions.h
gcc -c main.cpp
factorial.o: factorial.cpp functions.h gcc -c factorial.cpp hello.o: hello.cpp functions.h gcc -c hello.cpp
最后执行:
hello: main.o factorial.o hello.o
gcc main.o factorial.o hello.o -o hello