c++头文件与cpp的关系

经常在工程中看到的使用头文件的方法就是:
先写一个write函数的cpp:

#include <iostream>
using namespace std;
void write(char* str)
{
    cout<<str<<endl;
}

再写一个write函数的头文件,而头文件只需要包含write的声明就可以
write.h:

#ifndef _WRITE_H
#define _WRITE_H
void write(char* str);
#endif

下次需要使用write函数的时候只需要包含头文件就可以了,比如我在写一个hello.cpp

#include <iostream>
#include "write.h"
using namespace std;
int main(int argc, char** argv)
{
    write("hello,world");
    return 0;
}

编译的时候是:

g++ -c write.cpp
g++ -c hello.cpp

我们编译hello.cpp的时候是单独编译的,在编译hello.cpp的时候并不知道write函数的地址,所以它暂时把调用write的指令的目标地址搁置,等待最后链接的时候,由链接器去将这些指令的目标地址修正。

g++ -o hello hello.o write.o

那么在makefile当中可以这样写:

g++ -o $@ $^

而我甚至可以再写一个write_too的函数的cpp和头文件,然后编译生成write_too.o
还可以生成静态库文件:

ar crv libfoo.a write.o write_too.o

生成了libfoo.a的静态库,库名是foo

g++ -o hello hello.o libfoo.a

或者g++ -o hello hello.o -L. -lfoo 其中-L.表示在当前目录下查找

在我学习protobuf的时候 看到这种方法在protobuf上面得到了充分的体现:比如msg.pb.h和msg.pb.cc

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值