gcc 不能直接链接呀!

来源:4-2 [Linux C语言] 头文件与函数定义分离

Vseelove

2020-03-26 13:14

max.h :

int max(int a,int b);

main.c:

#include <stdio.h>
//#include"max.h"
int main()
{   int a = 21;    
    int b =12;    
    int num = max(a,b);    
    printf("max value = %d\n",num);
}

已经生产了 max.o 并编译

gcc max.o main.c -o main

warning:   implicit declaration of function ‘max’

不能直接干呀。

但是提示完后,成功编译出 “main” 程序。


写回答 关注

1回答

  • Vseelove
    2020-03-26 14:02:08

    已经解决:
    当主体文件 没有声明时(即没有包含的头文件)就会报错;对其的一些**猜测**:

     #include <stdio.h>

    //#include"max.h"

    int main()
    {   int a = 21;    
        int b =12;    
        int num = max(a,b);    
        printf("max value = %d\n",num);
    }

    max.h ↓

    int max(int a,int b);

    max.c ↓

    int max(int a,int b)
    {    if(a>b){
             return a;
         }else{
             return b;    
         }
    }

    没有包含头文件,也就是没有声明函数,但之前进行 了  compile and assemble. 生成 max.o 文件

    gcc max.c -c -o max.o

    于是

    gcc max.o max.c -o outfile
    gcc main.c max.o -o out

    警告提示:warning: implicit declaration of function ‘max’
    但成功生成 文件 out
    以上是没有 定义 函数。

    如果导入 头文件 (定义了 max 函数),或着直接在 main 中定义max函数,再和 *.o 文件 链接编译,

    gcc main.c max.o -o out

    就不会出现 警告和错误。


    Vseelo...

    有个词错了,头文件 是声明,不是定义。

    2020-03-26 14:12:07

    共 2 条回复 >

Linux C语言编程基本原理与实践

本视频教程介绍C语言基本工作原理以及适用与C的实际开发方式

203963 学习 · 451 问题

查看课程

相似问题