Linux+CLion+cmake 动态链接库的使用
在作《剑指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 动态链接库的使用相关推荐
- Clion生成动态链接库.dll
今天研究如何生成动态链接库.dll文件纠结了好久.在保证代码文件不报错的情况下,可能要注意几个方面. 一·项目结构要完整. Clion项目生成后会和其他编程工具不同的地方在于会有一个CMakelist ...
- VulkanLearning - 环境搭建:使用CLion+cmake链接第三方库
不知从何时开始,突然不想再打开VS写东西了(这人pass有病(很大一部分原因是找不到如何添加VC工程模板(说白了就是一条菜狗)))加上正要开始学习Vulkan以及一些相关的图形学知识,在工程编译方面要 ...
- bazel 链接第三方动态库_C语言学习篇(31)——linux中制作动态链接库
引言 前面我们讲解了什么是函数库(函数库就是一些事先写好的函数集合),函数库有什么作用(可以打包我们的编写的源代码,供他人使用,同时源码不可见,保护了自己的知识产权)以及函数库有2种提供方式:静态链接 ...
- LINUX系统中动态链接库的创建与使用
大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀 的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不 同,它里面的函数并不是执行程序本身的 ...
- linux动态库ppt,LINUX系统中动态链接库创建与使用补充_区块链白皮书代写|市场计划书项目PPT设计_Tbleg...
区块链白皮书代写 大家都知道,在WINDOWS系统中有很多动态链接库(以.DLL为后缀文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面函数并不是执行程 ...
- Linux下生成动态链接库是否必须使用 -fPIC 的问题
From: http://www.linuxidc.com/Linux/2011-06/37268.htm 在 Linux 下制作动态链接库,"标准" 的做法是编译成位置无关代码( ...
- 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 ...
- LINUX系统中动态链接库的创建和使用
大家都知道,在windows系统中有非常多的动态链接库(以.dll为后缀的文件,dll即dynamic link library).这种动态链接库,和静态函数库不同,他里面的函数并不是执行程式本身的一 ...
- linux gcc 静态 动态链接库
linux gcc 静态 动态链接库 静态链接库 首先生成依赖函数的目标文件 gcc -c source1.c source2.c; 然后归档目标文件到静态库 ar -rcs libYourID.a ...
最新文章
- Java学习总结:44(文件复制案例)
- 腾讯投资过 600 多家公司不惊奇,京东也有出手 260+ | 大公司投资并购盘点
- 如何检查linux系统的负载高低
- leetcode算法题--两两交换链表中的节点★
- 【Flask】项目中使用请求钩子的妙处有那些?
- mysql查询2020年之前_2020年成人高考成绩如何查询?2020年成考录取结果如何查询?...
- bo65连oracle报服务不响应,ORACLE常见问题一千问[1至100]
- VTK:单元格内部对象CellsInsideObject用法实战
- CF-786B(Legacy) 区间最短路
- python中递归函数写法_Python之递归函数
- 重新想象 Windows 8.1 Store Apps (75) - 新增控件: Hub, Hyperlink
- java生成随机验证图片的实现
- java无法找到加载主类是什么意思_java – 什么是“找不到或加载主类”是什么意思?...
- linux bios 禁用usb设备,当USB在UEFI / BIOS中工作时,为什么USB在Linux中不工作?
- 分析泰坦尼克号沉船数据 机器学习告诉你谁获救概率更大
- 硅计算机的原理,量子计算机工作原理揭秘
- LIS的O(nlogn)算法(二分)
- Docker学习四--Harbor私有仓库搭建
- 内部软件技术文档怎么做?
- mysql_row百度百科_MySQL
热门文章
- RunDll32.exe 详解及[Windows批处理]清除IE缓存
- [转载]MATLAB movie 函数动态绘图
- [Ruby]$: 是什么意思?
- Angular rxjs Subject笔记
- ECharts 雷达图在类目值下面显示数值
- Scrum之成败——从自身案例说起,仅供参考
- PAT (Advanced Level) 1140~1143:1140模拟 1141模拟 1142暴力 1143 BST+LCA
- ThinkPHP--栏目增删改查ADSF
- Androd安全——反编译技术完全解析
- 现在也是只能谢谢随笔了,但是在以后收货的日子里会有更多的感想记下