在作《剑指offer》中的单向链表的题目时,需要一些常用到的操作链表的函数放在一个文件下,我想把这些函数的声明都写在list.h文件中,把这些函数的定义都写在list.cpp文件中,这样就可以在测试文件test.cpp中调用list.cpp中定义的函数,或者我还想把有关l链表操作的函数封装成一个库,安装到电脑中,这个库可以被外部程序调用。

首先看一下动态链接库和静态链接库分别是什么

动态链接库是以.so结尾的文件,静态链接库是以.a结尾的文件。

一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。

一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。

(所以无论是动态链接库还是静态链接库,都会有lib文件)

1.首先是安装链接库

cmake是一个编程项目管理工具。

首先在你的工程目录下创建 list.cpp,list.h, CMakeLists.txt文件,并创建一个lib文件夹来盛放生成的链接库

然后是在CMakeLists.txt文件中添加如下语句

cmake_minimum_required(VERSION 3.5)

project(lib)

set(LIB_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

set(CMAKE_CXX_STANDARD 11)

set(LIST_SRC list.cpp)

ADD_LIBRARY(list SHARED ${LIST_SRC})

ADD_LIBRARY(list_static STATIC ${LIST_SRC})

INSTALL(TARGET list list_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)

INSTALL(FILES list.h DESTINATION include/list)

然后在终端操作安装动态和静态链接库

mkdir build

cd build

cmake DCMAKE_INSTALL_PREFIX=/usr ../

make

sudo make install

如果安装成功,那么就会显示如下信息

--install configuration

--installing: /usr/local/lib/liblist.so

--installing: /usr/local/lib/liblist.a

--Up-to-date: /usr/local/include/list/list/h

2.外部程序使用安装好的动态链接库

在一个新的工程目录下,你创建了test.cpp, CMakeLists.txt文件,在CMakeList.txt文件中写入如下语句

cmake_minimum_required(VERSION 3.5)

project(ListWithDynamic)

set(CMAKE_CXX_STANDARD 11)

include_directories(/usr/local/include/list)

add_executable(ListWithDynamic test.cpp)

target_link_libraries(ListWithDynamic /usr/local/lib/liblist.so)

对于这种我们自己编写安装的链接库,我们在使用的时候首先需要将链接库的头文件包含进来,就是这里的include_directories()函数实现这个功能,然后还需要将目标文件,就是这里的ListWithDynamic链接到liblist.so上,就是这里的target_link_libraries()函数实现这个功能,如果没有这个函数,编辑器会提示错误,“undefined reference to 'CreateListNode'” 

3.使用下载安装的第三方库和使用自己编写安装的库的一个在CMakeLists.txt的明显不同是

请查看另一篇文章https://mp.csdn.net/postedit/82380445

Linux+CLion+cmake 动态链接库的使用相关推荐

  1. Clion生成动态链接库.dll

    今天研究如何生成动态链接库.dll文件纠结了好久.在保证代码文件不报错的情况下,可能要注意几个方面. 一·项目结构要完整. Clion项目生成后会和其他编程工具不同的地方在于会有一个CMakelist ...

  2. VulkanLearning - 环境搭建:使用CLion+cmake链接第三方库

    不知从何时开始,突然不想再打开VS写东西了(这人pass有病(很大一部分原因是找不到如何添加VC工程模板(说白了就是一条菜狗)))加上正要开始学习Vulkan以及一些相关的图形学知识,在工程编译方面要 ...

  3. bazel 链接第三方动态库_C语言学习篇(31)——linux中制作动态链接库

    引言 前面我们讲解了什么是函数库(函数库就是一些事先写好的函数集合),函数库有什么作用(可以打包我们的编写的源代码,供他人使用,同时源码不可见,保护了自己的知识产权)以及函数库有2种提供方式:静态链接 ...

  4. LINUX系统中动态链接库的创建与使用

    大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀 的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不 同,它里面的函数并不是执行程序本身的 ...

  5. linux动态库ppt,LINUX系统中动态链接库创建与使用补充_区块链白皮书代写|市场计划书项目PPT设计_Tbleg...

    区块链白皮书代写 大家都知道,在WINDOWS系统中有很多动态链接库(以.DLL为后缀文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面函数并不是执行程 ...

  6. Linux下生成动态链接库是否必须使用 -fPIC 的问题

    From: http://www.linuxidc.com/Linux/2011-06/37268.htm 在 Linux 下制作动态链接库,"标准" 的做法是编译成位置无关代码( ...

  7. Linux使用cmake编译项目,如何使用cmake在linux中构建Qt项目(How to build Qt project in linux with cmake)...

    如何使用cmake在linux中构建Qt项目(How to build Qt project in linux with cmake) 我使用的是ubuntu 14.04,cmake 2.8.12.2 ...

  8. LINUX系统中动态链接库的创建和使用

    大家都知道,在windows系统中有非常多的动态链接库(以.dll为后缀的文件,dll即dynamic link library).这种动态链接库,和静态函数库不同,他里面的函数并不是执行程式本身的一 ...

  9. linux gcc 静态 动态链接库

    linux gcc 静态 动态链接库 静态链接库 首先生成依赖函数的目标文件 gcc -c source1.c source2.c; 然后归档目标文件到静态库 ar -rcs libYourID.a ...

最新文章

  1. Java学习总结:44(文件复制案例)
  2. 腾讯投资过 600 多家公司不惊奇,京东也有出手 260+ | 大公司投资并购盘点
  3. 如何检查linux系统的负载高低
  4. leetcode算法题--两两交换链表中的节点★
  5. 【Flask】项目中使用请求钩子的妙处有那些?
  6. mysql查询2020年之前_2020年成人高考成绩如何查询?2020年成考录取结果如何查询?...
  7. bo65连oracle报服务不响应,ORACLE常见问题一千问[1至100]
  8. VTK:单元格内部对象CellsInsideObject用法实战
  9. CF-786B(Legacy) 区间最短路
  10. python中递归函数写法_Python之递归函数
  11. 重新想象 Windows 8.1 Store Apps (75) - 新增控件: Hub, Hyperlink
  12. java生成随机验证图片的实现
  13. java无法找到加载主类是什么意思_java – 什么是“找不到或加载主类”是什么意思?...
  14. linux bios 禁用usb设备,当USB在UEFI / BIOS中工作时,为什么USB在Linux中不工作?
  15. 分析泰坦尼克号沉船数据 机器学习告诉你谁获救概率更大
  16. 硅计算机的原理,量子计算机工作原理揭秘
  17. LIS的O(nlogn)算法(二分)
  18. Docker学习四--Harbor私有仓库搭建
  19. 内部软件技术文档怎么做?
  20. mysql_row百度百科_MySQL

热门文章

  1. RunDll32.exe 详解及[Windows批处理]清除IE缓存
  2. [转载]MATLAB movie 函数动态绘图
  3. [Ruby]$: 是什么意思?
  4. Angular rxjs Subject笔记
  5. ECharts 雷达图在类目值下面显示数值
  6. Scrum之成败——从自身案例说起,仅供参考
  7. PAT (Advanced Level) 1140~1143:1140模拟 1141模拟 1142暴力 1143 BST+LCA
  8. ThinkPHP--栏目增删改查ADSF
  9. Androd安全——反编译技术完全解析
  10. 现在也是只能谢谢随笔了,但是在以后收货的日子里会有更多的感想记下