linux 程序、动态库、静态库内部添加版本号和编译时间详解

发布时间 - 2026-01-10 22:11:46    点击率:

给程序和库添加版本号和库,有利于维护和升级。

当然你可以在文件名上体现,比如有个程序叫 yun,文件名写为 yun_1.0.2,但这个需要每次手动维护,而且不能100%确保当前程序就是那个版本。所以,把版本号体现在程序内部,是一个不错的选择。

----------------------------- 我是做法分割线 -------------------------------

一、可执行程序

程序内部定义版本宏,然后 main 函数通过 -v 参数,打印版本号和编译时间,代码如下:

注:__DATE__(编译日期), __TIME__(编译时间)

#include <stdio.h>
#include <string.h>

#define VERSION	"0.0.2" // 此处每次发布版本要手动更新
#define NAME	"yun"

static void show_info(char *argv[])
{
	if (0 == strcmp("-v", argv[1]))
	{
		printf("%s version: %s (%s, %s)\n", NAME, VERSION, __DATE__, __TIME__);
		return;
	}
	else if (0 == strcmp("-h", argv[1]))
	{
		printf("Usage: %s [options]\n", NAME);
		printf("Options:\n");
		printf(" void\tRun %s\n", NAME);
		printf(" -v\tDisplay %s version information\n", NAME);
		printf(" -h\tDisplay help information\n");
		return;
	}
	
	printf("Usage: %s [-v | -h]\n", NAME);
	return;
}

int main(int argc, char *argv[])
{
	if (2 == argc)
	{
		show_info(argv);
		return 0;
	}

	printf("Can you feel me?\n");

	return 0;
}

运行效果:

二、动态库、静态库

库不采用 -v 这种方法,因为不是可执行程序。

我们可以给程序添加一个版本号字符串,编译成库后使用 strings 命令查看,代码如下:

/* add.h */

#ifndef _ADD_H_#define _ADD_H_int add(int a, int b);#endif /* _ADD_H_ */

/* add.c */

#include "add.h"// 此处每次发布版本要手动更新const char *LIB_INFO = "libadd version: 0.0.3 (2015-01-30, 08:30)";int add(int a, int b){return (a + b);}

编译及运行结果:

/* 静态库 */

/* 动态库 */

说明:

strings 命令: 用于显示文件中的可打印字符。

grep: 用于过滤无用信息,因为自定义的库信息包含 "version",所以就只显示包含 "version" 的行,否则其他信息太多不好找。

此方法也可适用于可执行程序添加版本信息。


# 动态库  # 静态库  # 详解linux下查看系统版本号信息的方法(总结)  # Linux7操作系统中如何安装MySQL5.6  # linux服务器操作系统有哪些  # 在VMware虚拟机里安装Linux操作系统  # Linux操作系统的概述与简介  # Linux如何查看操作系统版本号  # 可执行  # 是一个  # 我是  # 太多  # 有个  # 你可以  # 适用于  # 也可  # 我们可以  # 自定义  # 只显示  # 体现在  # 分割线  # 编译成  # 这种方法  # include  # pre  # xhtml  # br  # class 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何配置Horizon来管理队列?(安装和使用)  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  如何构建满足综合性能需求的优质建站方案?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  如何为不同团队 ID 动态生成多个独立按钮  如何用虚拟主机快速搭建网站?详细步骤解析  如何用AWS免费套餐快速搭建高效网站?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  如何在阿里云部署织梦网站?  Laravel如何处理文件下载请求?(Response示例)  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  javascript中的try catch异常捕获机制用法分析  如何快速生成可下载的建站源码工具?  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  Python文本处理实践_日志清洗解析【指导】  如何在万网主机上快速搭建网站?  Android使用GridView实现日历的简单功能  北京网站制作的公司有哪些,北京白云观官方网站?  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  html如何与html链接_实现多个HTML页面互相链接【互相】  Bootstrap整体框架之JavaScript插件架构  BootStrap整体框架之基础布局组件  javascript基于原型链的继承及call和apply函数用法分析  如何在七牛云存储上搭建网站并设置自定义域名?  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  如何打造高效商业网站?建站目的决定转化率  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  网站制作软件有哪些,制图软件有哪些?  如何在IIS7上新建站点并设置安全权限?  QQ浏览器网页版登录入口 个人中心在线进入  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  如何快速建站并高效导出源代码?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  详解MySQL数据库的安装与密码配置  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  如何在建站主机中优化服务器配置?  如何在阿里云购买域名并搭建网站?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  活动邀请函制作网站有哪些,活动邀请函文案?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  打造顶配客厅影院,这份100寸电视推荐名单请查收  微信推文制作网站有哪些,怎么做微信推文,急?  高性能网站服务器配置指南:安全稳定与高效建站核心方案