美文网首页
gcc编译器 多文件编译

gcc编译器 多文件编译

作者: 动感新势力fan | 来源:发表于2016-11-06 21:41 被阅读19次

这个问题实际上是说,已知头文件"a.h"声明了一系列函数(仅有函数原型,没有函数实现),"b.cpp"中实现了这些函数,那么如果我想在"c.cpp"中使用"a.h"中声明的这些在"b.cpp"中实现的函数,通常都是在"c.cpp"中使用#include "a.h",那么c.cpp是怎样找到b.cpp中的实现呢?
  其实.cpp和.h文件名称没有任何直接关系,很多编译器都可以接受其他扩展名。

编译器预处理时,要对#include命令进行"文件包含处理":将headfile.h的全部内容复制到#include "headfile.h"处。这也正说明了,为什么很多编译器并不care到底这个文件的后缀名是什么----因为#include预处理就是完成了一个"复制并插入代码"的工作。
  程序编译的时候,并不会去找b.cpp文件中的函数实现,只有在link的时候才进行这个工作。我们在b.cpp或c.cpp中用#include "a.h"实际上是引入相关声明,使得编译可以通过,程序并不关心实现是在哪里,是怎么实现的。源文件编译后成生了目标文件(.o或.obj文件),目标文件中,这些函数和变量就视作一个个符号。在link的时候,需要在makefile里面说明需要连接哪个.o或.obj文件(在这里是b.cpp生成的.o或.obj文件),此时,连接器会去这个.o或.obj文件中找在b.cpp中实现的函数,再把他们build到makefile中指定的那个可以执行文件中。

a.c a.h b.c中包含a.c的函数 gcc -c b.c 当a.c 文件不存在时编译不通过 怎么回事?
自己写错了的缘故 把a.h写成了a.c
实际测试是对的

相关文章

  • gcc编译器 多文件编译

    这个问题实际上是说,已知头文件"a.h"声明了一系列函数(仅有函数原型,没有函数实现),"b.cpp"中实现了这些...

  • 【Xcode编译原理】

    GCC编译器 Xcode4之前,Xcode是用GCC编译器来翻译代码的;GCC编译器是开源免费的编译器 GCC :...

  • gcc和g++版本之间切换

    gcc:gcc (GNU编译器套件) 编辑GNU编译器套件(GNU Compiler Collection)包括C...

  • 0基础自学linux运维-5.8-linux C编译基础

    一、GCC编译器 1.1 什么是GCC GNU编译器套件(GNU Compiler Collection) GNU...

  • GCC编译器的编译规则

    在使用Gcc编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,其中...

  • 2019-02-20

    最新Android ndk已经去掉了gcc编译器,然而使用clang编译 ffmpeg,在编译asm文件时会报错,...

  • 安装 nginx

    一、使用nginx必备软件 GCC 编译器yum install -y gcc G++ 编译器yum insta...

  • GCC/Clang编译器浅谈

    GCC和Clang编译器浅谈GCC是Linux上使用的编译器,Clang是Mac上使用的编译器,两者命令格式基本相...

  • CentOS 7 升级gcc/g++编译器

    CentOS 7 升级gcc/g++编译器参考链接:CentOS 7 升级gcc/g++编译器[https://b...

  • 在Linux中如何运行c++文件

    在Linux中如何运行c++文件 首先安装必要的工具和编译器来运行代码。 gcc(GNU编译器套件)简介: GNU...

网友评论

      本文标题:gcc编译器 多文件编译

      本文链接:https://www.haomeiwen.com/subject/moynuttx.html