编译(- c)某个源文件生成目标文件只需要路径有调用函数的头文件,链接(- o)成可执行文件需要加上实现函数的目标文件

特别说明:如果没有指定链接文件,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.c调用了函数 printf_hello(),所以编译main.c生成目标文件,需要路径下有functioins.h,不需要函数的源文件
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
原文地址:https://www.cnblogs.com/god-of-death/p/14675924.html