SO库版本号管理

2023-05-16

一、输入版本号

功能由Cmake软件实现。

1.     建立一个空白txt,重命名为config.h.in。输入代码:

 

#defineMAJOR_VERSION @MAJOR_VERSION@

#defineMINOR_VERSION @MINOR_VERSION@

#defineREVISION_VERSION @REVISION_VERSION@

#defineBUILD_VERSION @BUILD_VERSION@

 

2.     Cmakelists文件中插入

 

set (MAJOR_VERSION3)

set (MINOR_VERSION4)

set (REVISION_VERSION6)

set (BUILD_VERSION2)

 

3.     在工程的.c文件中添加#include “config.h”。config.h文件由Cmake根据config.j.in自动生成。在.c中增加函数void GetProperty(),代码如下:

 

void GetProperty()

{

printf("Version:%d.%d.%d.%d\n",MAJOR_VERSION,MINOR_VERSION,REVISION_VERSION,BUILD_VERSION);

}

GetProperty即可打印Cmakelists中设置的版本号信息。

4.     执行Cmake .

5.     执行make

得到.so库文件,该文件含有版本信息输出接口GetProperty。

二、读取版本号

1.     采用dlopen、dlsym、dlclose加载动态链接库

2.     获取GetProperty函数

3.    执行GetProperty函数

property.c的详细代码如下:

#include <stdio.h>
#include <dlfcn.h>

int main(int argc ,char *argv[])
{
    if(argc!=2)
   {
     printf("argument error!you must enter like this:\n");
     printf("./sotest test.so\n");
     return 0;

   }
    void * libm_handle = NULL;
    float (*cosf_method)(float);
    typedef void(*pf_t)();
    char *errorInfo;
    float result;
    
    // dlopen 函数还会自动解析共享库中的依赖项。这样,如果您打开了一个依赖于其他共享库的对象,它就会自动加载它们。
    // 函数返回一个句柄,该句柄用于后续的 API 调用
    libm_handle = dlopen(argv[1], RTLD_LAZY );
    // 如果返回 NULL 句柄,表示无法找到对象文件,过程结束。否则的话,将会得到对象的一个句柄,可以进一步询问对象
    if (!libm_handle){
        // 如果返回 NULL 句柄,通过dlerror方法可以取得无法访问对象的原因
        printf("Open Error:%s.\n",dlerror());
        return 0;
    }
    // 使用 dlsym 函数,尝试解析新打开的对象文件中的符号。您将会得到一个有效的指向该符号的指针,或者是得到一个 NULL 并返回一个错误
    pf_t pf=(pf_t)dlsym(libm_handle,"GetProperty");
    errorInfo = dlerror();// 调用dlerror方法,返回错误信息的同时,内存中的错误信息被清空
    if (errorInfo != NULL){
        printf("Dlsym Error:%s.\n",errorInfo);
        return 0;
    }
    // 执行“cosf”方法
    pf(); 
    // 调用 ELF 对象中的目标函数后,通过调用 dlclose 来关闭对它的访问
    dlclose(libm_handle);
    return 0;
}


运行结果如下:


参考文献:

http://www.cnblogs.com/gulvzhe/archive/2012/06/27/2565983.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SO库版本号管理 的相关文章

  • c++中函数屏蔽和函数参数屏蔽

    情况一 函数的屏蔽 例如 nbsp nbsp void Function int a int b nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp int c a b 若是不使用函
  • STM32串口之奇偶校验设置

    今天 xff0c 在调试rs485的时候出现了32芯片串口端可以正常发送数据 xff0c 485芯片数据输出端不能发送数据 xff0c 自己查了下485芯片手册 xff0c 发现485芯片有个引脚通过32芯片给出高低电平来控制它是接受还是发
  • 基于AudioQueue实现音频的录制和播放(标贝科技)

    标贝科技 https ai data baker com source 61 qwer12 填写邀请码fwwqgs xff0c 每日免费调用量还可以翻倍 基于AudioQueue实现音频的录制和播放 文章目录 基于AudioQueue实现音
  • webots建立四连杆机构模型

    webots建立四连杆机构模型 使用webots内置的插件构建四连杆机构建立robot形状参考文献 使用webots内置的插件构建四连杆机构 首先 xff0c 可以去官网下载最新的webots xff0c 网址 xff1a https ww
  • STM32使用FREERTOS获取系统时间

    使用CUBE MX生成带有free RTOS操作系统的工程 xff0c 我们经常会使用到系统相对时间 xff0c 尤其是使用其做数据采集的项目中经常需要给你数据打上时间的标签就需要实时获取系统的相对时间 当然 xff0c 我们可以单独开一个
  • 一个简单的C++工程管理的Makefile

    摘要 C C 43 43 代码都需要使用编译器来编译代码生成相应的目标文件 xff0c 在大部分的windows开发中 xff0c 开发者多用商用或开源的集成开发环境 xff08 IDE xff09 xff0c 比如 xff1a visua
  • STM32F4 使用SPI读取气压计MS5611的数据并转化为大气压强

    ms5611是同时支持I2C和SPI通信协议的气压计芯片 已经很普遍的被用在飞行器控制板上作为高度传感器 开发过stm32的朋友都知道它的硬件I2C是由bug的 xff0c 一般使用的都是自己编写的软件I2C通信协议 但是其硬件SPI通信却
  • DIY四旋翼(穿越机)软硬件设计

    今天教教大家怎么真正意义上的DIY四旋翼飞行器 xff0c 我将从机架入手DIY穿越机 下面是我的步骤 xff1a 1 设计机架三维图纸 xff1b 2 导出机架的二维图纸并做修改 xff1b 3 设计飞控板 xff1b 4 试飞 step
  • 磁力计校正和数据处理

    在飞控涉及到的几个传感器中磁力计因该是属于最简单的传感器 在飞控上一般使用的磁力计传感器芯片是HMC5883L HMC5983 MPU9250 MAG3110等 这些芯片利用的物理原理都相同 xff0c 只是在精度和数据接口上有些区别 下面
  • 在这个被欲望和利益所支配的世界里

    剩下的那点酒精再次滑过嘴角 xff0c 才感觉到一丝凉意 谁说酒精可以麻醉人的思维 xff0c 可以暂时忘掉想忘的一切 xff0c 骗人的 xff0c 都是骗人的 我依然很清醒 不可否认 xff0c 这的确是一个被欲望和利益所支配的世界 x
  • 写给夏燕第十一个男人

    悲哀 xff0c 李旧 xff09 是她第十一个男人 她想要什么呢 xff1f xff1f xff1f 很多男人吗 xff1f 很多是多少 xff1f 我是她第十个男人 xff0c 我原理她了 说自己以前走的路不可能回头了 xff0c 叫我
  • 美女登场

    不怕大家笑话 xff0c 我大学毕业时 xff0c 还是个处长 xff0c 所谓处长就是没有经过女人滋润的那种 xff0c 我想大家都知道我是什么意思的 其实 xff0c 上大学的时候我还是有些女人缘的 xff0c 毕竟在班上我的学习成绩还
  • 纠缠在回忆里的感伤

    一个身影从眼前晃过 xff0c 我本能的踩死了刹车 xff0c 车因为惯性向前使了一点后终于停了下来 xff0c 幸亏没有撞到那个骑车的老人 xff01 我尚惊魂未定 xff0c 额头冒出了冷汗 xff0c 好险 xff01 人在开车心却早
  • MySQL索引原理(标贝科技)

    标贝科技 https ai data baker com source 61 qwer12 填写邀请码fwwqgs xff0c 每日免费调用量还可以翻倍 什么是索引 xff1f 索引是帮助MySQL高效获取数据的数据结构 索引的本质就是数据
  • 最全最简单方法解决安装ROS的rosdep update超时错误

    最近利用虚拟机Ubuntu安装ROS xff0c 遇到了rosde update这一命令一直超时出错的问题 xff0c 在网上搜索很多资料 xff0c 终于解决 xff0c 所以总结一下解决方案 方法一 xff1a 手机开热点上网 不建议
  • c实现 udp通信

    1 创建对象 int udp socket 61 socket AF INET SOCK DGRAM 0 AF INET 网络通信协议 SOCK DGRAM 传输协议 属性默认 0 2 想接收信息就需要绑定地址信息 struct socka
  • 软件测试的生命周期及基本流程

    软件测试的基本流程 1 xff1a 需求分析 答 xff1a 仔细阅读需求文档 xff0c 理解需求文档 xff0c 主要是对业务的学习 xff0c 分析需求点 xff0c 参与需求评审会议 xff1b 2 xff1a 制定测试计划 答 x
  • 软件测试的分类有哪些?

    软件测试从整体来说分为开发阶段 测试单位阶段 测试技术阶段 开发阶段 xff1a 单元测试 集成测试 系统测试 验收测试 测试单位阶段 xff1a 内部测试 用户测试 第三方测试 测试技术阶段 xff1a 白盒测试 黑盒测试 灰盒测试 单元
  • 测试用例的八大设计方法

    从测试方法分为 xff1a 黑盒测试 等价类划分 边界值分析 因果图分析 错误测试 白盒测试 语句覆盖 判定覆盖 条件覆盖 判定 条件覆盖 多重条件覆盖 等价类划分 xff1a 答 xff1a 等价类划分是指某个输入域的子集合 xff0c
  • 软件测试中一个BUG的生命周期

    测试人员 发现BUG 提交BUG 指派前后端BUG 前后端开发确认BUG 不是BUG 关闭BUG 前后端开发修复BUG 回归验证BUG 二次开启BUG 是 关闭BUG BUG各种状态处理 答 xff1a 已指派 xff1a 测试人员已将BU

随机推荐

  • Fiddler抓取PC端微信小程序请求方法

    最近PC端的微信更新了 xff0c 在微信中也可以打开相对应的小程序了 xff0c 那么对于大多数测试同学来说要是可以在PC端打开小程序直接查看小程序发出的HTTPS请求报文 xff0c 那么定位问题也就太方便了吧 xff0c 我就是抱着这
  • 从Navicat切换到DBeaver的详细教程,一学即会。

    自从学会使用了Navicat xff0c 用一段时间发现Navicat有一些的问题缺陷 xff1a 1 需要购买花钱才能使用 xff0c 网上找的破解版也能使用 xff0c 但一些公司有版权限制 xff0c 又不能使用 xff1b 2 在连
  • VS code C/C++扩展包依赖cpptools-win32.vsix离线安装

    环境 xff1a 64位win10 xff0c VS code版本1 48 2 在visual studio code下自动安装C C 43 43 扩展包的依赖时 xff0c 可能会碰到如下异常和提示 xff1a 正在更新 C C 43 4
  • ROS错误:摄像头数据格式错误 wants topic /image/compressed to have datatype/md5sum

    ROS错误 摄像头数据格式错误 wants topic image compressed to have datatype md5sum 错误提示 xff1a ERROR 1260927377 348922000 Received erro
  • GMM-HMM声学模型实例详解(标贝科技)

    欢迎测试标贝科技AI开放平台 https ai data baker com source 61 qwer12 GMM HMM声学模型实例详解 GMM HMM为经典的声学模型 xff0c 基于深度神经网络的语音识别技术 xff0c 其实就是
  • C++学习笔记【六】—— 存储类

    Auto 声明变量时根据初始化表达式自动推断该变量的类型 声明函数时函数返回值的占位符 C 43 43 11已弃用 span class token keyword auto span f span class token operator
  • wget curl post请求

    wget header 61 User Agents Chrome header 61 Content Type Application json post data 61 url https zcool cloud resource te
  • 串口传输速率计算

    串口数据格式 起始位1bit xff0c 数据位8bit xff0c 停止位1bit xff0c 无校验 xff0c 无流控 xff1b 计算 波特率115200 bps xff1d 115200 位 秒 xff0c 没有校验位时 xff0
  • 位(bit), 字节(byte), 字(word),双字(dword or Qword)释义

    位 xff08 bit xff09 位 xff08 bit xff09 来自英文bit xff0c 音译为 比特 xff0c 表示二进制位 位是计算机内部数据储存的最小单位 xff0c 11010100是一个8位二进制数 一个二进制位只可以
  • IEEE754标准浮点数转换

    原文 xff1a https blog csdn net hqh131360239 article details 81353582 IEEE754标准浮点数转换 IEEE754标准是一种浮点数表示标准 xff0c 一般分为单 双精度两种
  • 高程初识

    高程是指某一点相对于基准面的高度 xff0c 目前常用的高程系统共有正高 正常高 力高和大地高程4种 xff0c 而高程基准各国均有不同定义 高程系统则是定义某点沿特定的路径到一个参考面上距离的一维坐标系统 高程系统 地球上某一点的高程通常
  • Source Insight4 设置相对路径

    source insight4 设置相对路径步骤 xff1a 1 xff09 新建工程 2 xff09 选择 project source directory时 xff0c 必须选择工程的根目录 xff01 3 xff09 选择文件并添加
  • STM32F407 Flash操作笔记

    简述 STM32F4XX的闪存擦除方式分为两种 xff1a 扇区擦除 xff08 最小单元16K xff09 和整片擦除 在实际应用中 xff0c 为满足重要信息的存储 xff0c 需将信息存入FLASH中 xff0c 针对以上两种擦除方式
  • STM32 软件按键消抖

    引言 通常按键所用的开关都是机械弹性开关 xff0c 当机械触点断开 闭合时 xff0c 由于机械触点的弹性作用 xff0c 一个按键开关在闭合时不会马上就稳定的接通 xff0c 在断开时也不会一下子彻底断开 xff0c 而是在闭合和断开的
  • STM32 中断函数SysTick_Handler理解

    目的 滴答定时器整理 xff08 STM32F103 xff09 用了一段时间的滴答定时器 xff0c 突然忘记其中配置方法 xff0c 重新翻阅手册及博文 xff0c 在此记录备忘 SysTick的重装寄存器决定了定时器频率 xff0c
  • srilm的安装与使用(标贝科技)

    欢迎体验标贝语音开放平台 地址 xff1a https ai data baker com source 61 qaz123 xff08 注 xff1a 填写邀请码hi25d7 xff0c 每日免费调用量还可以翻倍 xff09 一 简介 简
  • 信号强度(RSSI)知识整理

    为什么无线信号 xff08 RSSI xff09 是负值 答 xff1a 其实归根到底为什么接收的无线信号是负值 xff0c 这样子是不是容易理解多了 因为无线信号多为mW级别 xff0c 所以对它进行了极化 xff0c 转化为dBm而已
  • JLink 警告:The connected J-Link is defective,Proper operation cannot be guaranteed.

    概述 安装j link较新版本 xff08 JLink Windows V632b exe xff09 的驱动 xff0c 每烧录一次程序报一次警告 xff0c 警告如下 xff1a The connected J Link is defe
  • [PYTHON]修改当前进程环境变量

    myenv 61 os environ myenv 34 PATH 34 61 34 xxxx 34 43 myenv 34 PATH 34 注意 xff1a 此方法仅在python的当前进程中生效 xff0c 如果此时通过subproce
  • SO库版本号管理

    一 输入版本号 功能由Cmake软件实现 1 建立一个空白txt xff0c 重命名为config h in 输入代码 xff1a defineMAJOR VERSION 64 MAJOR VERSION 64 defineMINOR VE