目录

目标:

环境

创建静态和动态链接库

文件准备

构建

安装静态链接库

使用静态链接库和动态库

使用动态库

使用静态库


目标:

构建静态链接库和动态链接库,安装到系统,写一个程序使用安装的静态链接库。

环境

ubuntu18

cmake version 3.17.3

创建静态和动态链接库

文件准备

新建demo5-lib文件夹,包含内容如下

parallels@Lincoln:~/workspace/cmakedemo/demo5-lib$ ll
total 24
drwxrwxr-x 3 parallels parallels 4096 Jan  2 21:03 ./
drwxrwxr-x 7 parallels parallels 4096 Jan  2 20:38 ../
drwxrwxr-x 2 parallels parallels 4096 Jan  2 21:03 build/
-rw-r--r-- 1 parallels parallels  550 Jan  2 21:03 CMakeLists.txt
-rw-r--r-- 1 parallels parallels  672 Jan  2 20:56 DateUtils.c
-rw-r--r-- 1 parallels parallels  115 Jan  2 20:56 DateUtils.h

build 是空目录,用来做构建用

DateUtils.h代码

#ifndef DEMO_DATEUTILS_H
#define DEMO_DATEUTILS_H//显示当前时间
void showNow();#endif //DEMO_DATEUTILS_H

DateUtils.c代码

#include <stdio.h>
#include <time.h>
#include "DateUtils.h"void showNow() {time_t timep;struct tm *p;time(&timep);p = gmtime(&timep);printf("%d-", 1900 + p->tm_year);      /*当前年份,从1900开始*/printf("%d-", 1 + p->tm_mon);          /*当前月份,范围是0-11*/printf("%d ", p->tm_mday);           /*当前月份日数,范围是1-31*/printf("%d:", 8 + p->tm_hour);         /*当前时,这里获取西方的时间,北京东八区时间+8*/printf("%d:", p->tm_min);            /*当前分*/printf("%d\n", p->tm_sec);           /*当前秒*/
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(demo5-lib)#静态库
add_library(dateUtils_static STATIC DateUtils.c)
#动态库
add_library(dateUtils_shared SHARED DateUtils.c)#指定静态库的名字是hello,要不然名字会和add_library的target一样,也就是:dateUtils_static
SET_TARGET_PROPERTIES(dateUtils_static PROPERTIES OUTPUT_NAME "hello")
#指定静态库的名字是hello,要不然名字会和add_library的target一样,也就是:dateUtils_shared
SET_TARGET_PROPERTIES(dateUtils_shared PROPERTIES OUTPUT_NAME "hello")

构建

安装静态链接库

安装到系统,以后可像使用系统库的方式使用。

可以在最后看到安装的路径

使用静态链接库和动态库

使用动态库

新建demo6-use-lib文件夹,内容如下:

parallels@Lincoln:~/workspace/cmakedemo/demo6-use-lib$ ll
total 20
drwxrwxr-x 3 parallels parallels 4096 Jan  2 21:38 ./
drwxrwxr-x 8 parallels parallels 4096 Jan  2 21:36 ../
drwxrwxr-x 3 parallels parallels 4096 Jan  2 21:45 build/
-rw-r--r-- 1 parallels parallels  126 Jan  2 21:38 CMakeLists.txt
-rw-rw-r-- 1 parallels parallels   78 Jan  2 21:36 main.c

main.c

#include <dateutil/DateUtils.h>int main() {showNow();return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(demo6-use-lib)add_executable(main main.c)
#使用连接库dateUtil
target_link_libraries(main dateUtil)

构建

运行

运行报错,使用ldd查看找不到库文件

查看文件确实存在:静态库libdateUtil.a和 动态库 libdateUtil.so

而且能看出默认使用的是动态库

遇到这种问题,可以使用ldconfig更新下库的缓存文件

使用静态库

修改CMakeLists.txt中的

target_link_libraries(main dateUtil) 为 target_link_libraries(main dateUtil.a)  备注:也可以使用 dateUtil.so显示使用动态库

重新编译运行后,使用ldd已经看不到动态链接库了。也能正常运行。

CMake入门3之 静态链接库和动态链接库相关推荐

  1. C++静态链接库与动态链接库理解

    原文:https://www.cnblogs.com/skynet/p/3372855.html 看到一篇介绍静态链接库和动态链接库的文章,写的太好了,遂转载过来分享一下. 这次分享的宗旨是--让大家 ...

  2. 静态链接库与动态链接库 (二)动态链接库的编译与使用

    上一篇文章里大概描述linux下静态链接库的编译与使用,下面讲动态链接库的编译与使用方法. 1. 什么是动态链接库 所谓动态链接库,是指编译的时候不会把程序引用到的库插入到执行程序里,而是在执行时候才 ...

  3. Linux下的静态链接库和动态链接库编程

    Linux下的静态链接库和动态链接库编程 参考: Linux下的静态链接库和动态链接库编程 - Histring - 博客园 Mac下静态库和动态库的创建和使用_C/C++_vincent2610的专 ...

  4. Makefile常用万能模板(包括静态链接库、动态链接库、可执行文件)

    from: Makefile常用万能模板(包括静态链接库.动态链接库.可执行文件) 本文把makefile 分成了三份:生成可执行文件的makefile,生成静态链接库的makefile,生成动态链接 ...

  5. 静态链接库和动态链接库(转)

    我们可以创建一种文件里面包含了很多函数和变量的目标代码,链接的时候只要把这个文件指示给链接程序就自动地从文件中查找符合要求的函数和变量进行链接,整个查找过程根本不需要我们操心. 这个文件叫做 &quo ...

  6. 静态链接库、动态链接库和动态加载库

    前言 静态库是obj文件的一个集合(目标文件中通常仅解析了文件内部的变量和函数,对于引用的函数和变量还没有解析,这需要将其他已经编写好的目标文件引用进来,将没有解析的函数和变量进行解析,通常引用的目标 ...

  7. c语言库文件是dll还是lib,C语言之静态链接库与动态链接库(2)

    我们发现,无论是静态链接库还是动态链接库,最后都有lib文件,那么两者区别是什么呢? 其实,两个是完全不一样的东西.静态库对应的lib文件叫静态库,动态库对应的lib文件叫导入库.实际上静态库本身就包 ...

  8. cnsl是什么意思_VS2010下创建静态链接库和动态链接库

    VS2010下创建静态链接库和动态链接库 类封装成dll如果你的工作长期与某个领域相关,比如说长期做直接体绘制 (DVR)方面的开发,那么你可能经常使用自己的传递函数类,如果每一个工程你都把传递函数类 ...

  9. linux下静态链接库和动态链接库

    关于链接库的知识,网上太多资料了,但是并不代表我很熟悉.今天遇到了 一个问题,就是由于静态链接库和ubuntu系统不兼容导致的,虽然花了点时间才搞定 但是,其中暴露的问题也不少. 没有区分好静态链接库 ...

最新文章

  1. 可靠性测试-故障模型库
  2. appium输入和清除操作各方法对比(android)
  3. RPM   YUM
  4. 基站定位php,SIM800C支持基站定位功能了。。。
  5. 4.线性和卷积——边界问题、解决边界方法和Matlab实战_3
  6. Openwrt 软件安装源
  7. [转载] Discrete Mathematics——04 一阶谓词逻辑基本概念
  8. wordpress建立二级导航菜单
  9. iOS端Mock GPS定位 —— 测试、开发、玩游戏、发朋友圈等等,你都用得上(转)
  10. 计算机的it入门知识,IT基础知识入门课程.ppt
  11. 计算机实验报告简要实验步骤,计算机实验报告模板
  12. msfconsole常用搜索命令search
  13. 视频本地化之 AE 处理流程
  14. 鸿蒙系统怎么安装网易云音乐,网易云音乐鸿蒙版app下载-网易云音乐鸿蒙版最新版下载v1.7.5-IT168下载站...
  15. Django实现微信小程序九宫格切图后端(第九周学习记录)
  16. python re.split 空格_str.split和re.split中空格的区别
  17. Calendar类获取当前时间上一个月,下一个月,当月的最后一天等的处理方法
  18. SAP 新配置公司代码F-02记账时报错“通用日记账的分类账定制设置中存在不一致” 解决
  19. windows下如何安装及使用github
  20. mtd基础介绍(收藏)

热门文章

  1. 16Cost Community
  2. Android中 adb shell ps 查看手机中进程信息
  3. lvx-las-pcd-txt 批量转换工具 2.0
  4. 陈越《数据结构》第三讲 树(上)
  5. 石油网络的放大器设置问题
  6. 支付宝国际支付 对接
  7. 硬盘录像机NVR、DVR或者带存储的摄像头通过GB28181协议接入LiveGBS可以播放设备的录像
  8. aspx文件编译成DLL文件的原理
  9. mac(Linux)安装配置kafka环境
  10. Ubntu分辨率低解决办法