我们在日常编码中,可能会出现这样一种情况:我们要将我们写好的函数或者类提供给别人,但是我们只想给他提供接口而不想让他了解到函数的具体细节。这时我们可以将我们的函数封装成库然后和头文件一起提供给他,这样他按照接口的说明文档就可以使用了,但是无法了解到内部是如何实现的。

编写库文件

有一个文件夹名为cppSpace,里面有一个helloWorld.h和helloWorld.cpp文件,helloWorld.h内容如下:

#ifndef LIBHELLOWORLD_H_
#define LIBHELLOWORLD_H_void printHello();  #endif

helloWorld.cpp内容如下:

#include<iostream>using namespace std;void printHello()
{cout<<"Hello world!"<<endl;
}

现在我们在cpp文件夹下新建一个名为CMakeLists.txt的文件,并在里面添加如下内容:

# add_library(程序名 源代码文件)
add_library( hello helloWorld.cpp )
add_library( hello_shared SHARED HelloWorld.cpp )

add_library()的意思就是将helloWorld.cpp封装成静态库,加上SHARED就是生成共享库。
现在我们在cpp文件夹下新建一个文件夹名为build,然后切换到build文件夹下,使用cmake对其进行编译。在终端中输入:

cd build
cmake ..
make

执行完后,build目录下就会出现libhello.a(静态库)和libhello_shared.so(共享库)。
cppSpace文件夹的树目录如下图所示:

库的调用

现在我们已经有了helloWorld.h头文件和libhell.a库,我们将这两个文件提供给别人,那么别人该如何使用呢?
我们新建一个名为cpp的文件夹,将helloWorld.h和libhell.a拷贝到cpp文件夹下,并且在cpp文件夹下新建useHello.cpp文件,添加以下内容:

#include "helloWorld.h"int main()
{printHello();return 0;
}

可以看到,在useHello.cpp中我们调用了printHello()函数,要想该函数被成功调用,我们还需要在编译时链接到库文件libhello.a。
创建CMakeLists.txt文件,加入以下内容:

link_directories(/home/user/cpp)  # 这个路径就是存放.a文件的路径
add_executable( useHello useHello.cpp )
target_link_libraries( useHello libhello.a )  # 建立与库文件的链接

然后再cpp文件夹下新建build文件夹,进入build文件夹,执行下面指令

cmake ..
make
./useHello

终端成功输出:

Hello world!

cpp文件夹的树目录如下图所示:

参考链接:https://mp.weixin.qq.com/s/QgT0L49R2VkmCkWxFxnnvQ

C++编写库文件以及调用相关推荐

  1. g++ 生成C++ .so库文件,并调用示例

    Tags: g++ C++ so library 在Linux系统下用g++命令编译C++程序.也可以生成so,a链接库 示例一 编译时链接so库 Test.h 文件内容 Main.cpp文件内容 命 ...

  2. linux下Qt调用C++库文件(.so)程序实现

    文章目录 主要内容 一.编程环境及实现方法 二.项目实现 1.创建项目 2.导入库文件 三.项目中遇到的问题 总结 主要内容 如标题所示,在linux下使用qtcreator创建项目调用C++库文件, ...

  3. C++库文件和头文件编写教程

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 「本文介绍了在Linux系统下生成库文件,以及编写头文件来使用该库 ...

  4. 利用CMakeLists.txt添加库文件

    利用CMakeLists.txt添加库文件 在一个 C++ 工程中,并不是所有代码都会编译成可执行文件.只有带有 main 函数的文件才会生成可执行程序.而另一些代码,我们只想把它们打包成一个东西,供 ...

  5. FPGA之道(30)编写自己的vhdl库文件

    文章目录 前言 编写自己的vhdl库文件 Work库 记录数据类型 子程序介绍 函数 过程 子程序使用总结 程序包 自定义程序包范例 前言 本文节选自<FPGA之道>来一起学习下高阶Ver ...

  6. matlab将脚本导出动态库文件.dll,并被python调用

    文章目录: 一.matlab将脚本生成动态库.dll文件 1.1 编写简单的脚本函数 1.2 生成dll文件 二.python调用.dll 所使用的的环境如下: 系统:windows10 matlab ...

  7. 【转】matlab与C/C++混合编程——在Windows/Linux上调用Matlab编译的动态库文件

    转自:matlab与C/C++混合编程--在Windows/Linux上调用Matlab编译的动态库文件_sinat_18131557的博客-CSDN博客 date version comments ...

  8. java 动态库_java调用dll动态库文件的一般总结

    前一段时间,在项目需求中,需要调用一下第三方的动态库文件,下面是本人一些尝试的经历. 首先需要明白的是,在java中是不能直接调用动态库文件的,因为动态库文件是使用c或是c++编写的,作为一种跨   ...

  9. Java调用库文件(JNI)(android对此有所改变)

    1.准备java 程序 testdll.java,内容为: public class testdll {  static {  System.loadLibrary("goodluck&qu ...

最新文章

  1. Swift常量和变量
  2. vty 虚拟终端连接 line vty 0 4 和line vty 5 15 区别
  3. 一些java面试高频题
  4. iOS之深入解析单例的实现和销毁的底层原理
  5. [html] 说说你对html中的置换元素和非置换元素的理解
  6. 嵌入式Linux入门6:u-boot移植
  7. la环球乐园里的机器人_北京环球度假区发布小黄人乐园主题视频,抢鲜感受未来的欢乐体验...
  8. linux deploy下载地址,Linux部署 Linux Deploy
  9. 点云定义、PCL数据类型和点云处理方式
  10. 保姆级讲解Transformer
  11. 稳坐青梅零食第一宝座,溜溜梅凭什么?
  12. oracle tns 启动失败,Oracle 监听启动失败 TNS-12555: TNS:permission denied 解决方案
  13. w7的计算机的工具在哪里,win7旗舰版内置的便签工具在哪?工具使用图解
  14. 【ORM框架】Python ORM框架——peewee(详细)
  15. Java中如何实现添加用户信息_如何通过Java客户端在Active Directory中创建新用户并将其添加到现有组...
  16. 老板电脑装监控,聊天记录全被掌握
  17. 【Verilog】时序逻辑电路 -- 程序设计与应用
  18. R语言ggplot2 | R语言绘制物种组成堆叠柱状图(二)
  19. ThinkPHP5结合云之讯短信验证简单案例
  20. 微信小程序开发之城市选择器 城市切换

热门文章

  1. 基于Open CV的植物图像分类识别项目
  2. 从Idea到付诸实践,你必须要知道的
  3. 超详细Openstack核心组件——Placement部署
  4. 佳能(Canon)打印机初始化备忘录
  5. 液压杆原理//2021-1-30
  6. DRG/DIP分组器HIS、电子病历、病案等系统调用接口说明,支持java c#等多种语言,有c#代码参考
  7. js 获取汉字首拼和全拼和拼音
  8. 自动抢红包-辅助功能的使用
  9. html中重置居中单词是,HTML中的居中方法
  10. manifestdependency,manifest文件