as 怎么将多个cpp文件代码编译成so_C++个人学习笔记——5. 编写库文件及头文件...

本文详细介绍了如何在Linux环境下创建C++库,包括静态库和动态库,并通过CMakeLists.txt文件进行编译。此外,还阐述了编写头文件的重要性,以供其他程序调用库函数,并通过实例展示了头文件的创建和使用方法。
摘要由CSDN通过智能技术生成

d8aed8d33c922def27d39c2e6a19bf95.png

「本文介绍了在Linux系统下生成库文件,以及编写头文件来使用该库函数」

1. 编写库文件

我们知道C++工程在编译时,含有main()函数的文件会被生成可执行程序。而那些不含main()函数的代码,编译后一般是被其他程序调用,因此我们可以把他们打包成一个“东西”,即为库(Library)。

库一般是许多程序和算法的集合,例如openCV库包含了很多计算机视觉相关算法,Eigen库提供了很多矩阵代数计算的算法。

我们以一个简单的c++文件为例演示如何编写一个库。

在根目录下新建一个cppSpace文件夹,并在该文件夹中新建如下的libHelloWorld.cpp文件:

//不含main()函数的库文件

该库文件较为简单,只提供了一个printHello()函数,调用该函数将得到一条输出信息。

根据上一篇文章中对cmake的介绍,我们在CMakeLists.txt文件中加入以下指令:

#该指令语法格式:add_library( 程序名  源代码文件 ) 

该命令告诉cmake,我们想把该文件编译成一个叫"hello"的库。接下来按照上一篇文章讲的步骤,使用cmake对该工程进行编译,在终端中输入:

cd build
cmake ..
make

b7f47c5142d90b67b2a66485c2d8e1ec.png

运行完以上指令后,目录中生成了一个libhello.a的文件,即我们的库,该库类型为静态库,静态库每次调用时都会生成一个副本,较占空间。而共享库在多次调用时只产生一个副本,节省空间,生成共享库的方法是在CMakeLists.txt文件中加入以下指令:

add_library( hello_shared SHARED libHelloWorld.cpp )

再次使用cmake对该工程进行编译,就将得到libhello_shared.so文件,此即共享库文件。

6f6217c5bb5ea67e279331011671a1bb.png

如果仅有以上两种格式的文件,我们并不知道里面函数时什么形式的,也不知如何调用他们,为了能让大家使用这些库函数,我们需要编写一个头文件,说明这些库里有些什么。对于使用者,只要在程序中声明了该头文件,就可以调用这个库。

2.编写头文件

头文件是C++程序中开头部分的重要指令,关于头文件的作用机制,我们在之前的这篇文章(学习笔记1_头文件声明)中已经学习过。下面以编写libhello.a的头文件为例说明其编写和使用的过程。

在该文件夹(cppSpace文件夹)下,新建libHelloWorld.h头文件:

#ifndef LIBHELLOWORLD_H_

编写得到了我们的头文件libHelloWorld.h,接下来编写一个可执行程序useHello.cpp来调用他:

#include 

要想使该库函数被成功调用,我们还需要在编译时连接到库文件libhello.a中,即在CMakeLists.txt文件中加入以下指令:

#正常对useHello.cpp文件进行编译

这样,文件useHello.cpp就可以使用hello.a库文件中的库函数了。

至此,库文件和头文件的编写及使用过程就介绍完了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值