如何在autoconf中定义共享库主要版本?

 失和孔洞_943 发布于 2023-02-13 11:24

我使用autoconf/automake/libtool来构建共享库.我想将主要数量的库版本传递给共享库soname.

我在configure.ac中有以下声明:

AC_INIT([libabc], [1.1.0])

以下Makefile.am:

AM_CPPFLAGS              = -I$(top_srcdir)/include -Wall -Wextra
LDADD                    = libabc.la

lib_LTLIBRARIES          = libabc.la
nodist_libabc_la_SOURCES = $(top_srcdir)/config.h
libabc_la_SOURCES        = $(top_srcdir)/src/abc.c

我可以为配置脚本,源和共享库soname提供相同的版本.我可以在源代码中使用自动生成的config.h中定义的VERSION或PACKAGE_VERSION,但这不会影响soname,它总是libabc.so.0.

有没有办法强制libtool使用AC_INIT指令中的主要版本?如果没有,定义主要/次要号码的首选方式是什么?

1 个回答
  • 使用库进行版本控制非常复杂.MAJOR.MINOR.MICRO版本控制系统可能适用于某些软件包,但有一些缺点.

    MICRO修订版块意味着库具有内部更改 - 通常是错误修复 - 但对接口不透明.理想情况下,共享库应该是二进制兼容的.MINOR修订版可能会添加功能,但不应破坏任何现有API.MAJOR修订版可能会破坏API,需要更改应用程序代码.

    libtool的版本控制系统,描述了一个更全面的方法,对于提供的规则current:revision:age,你可以传递给描述libfoo_la_LDFLAGS -version-info.还有另一种选择:libfoo_la_LDFLAGS = -release-info.该系统描述了兼容的库范围的"范围".

    我建议看一下使用'复杂'版本控制的成熟软件包的文件configure.acMakefile.am文件,比如GTK +,GLib库; 并决定是否需要投资这种复杂性.


    Ulrich Drepper 有一些相当技术性的论文描述了最终的ABI版本.这些可能与系统libc(glibc)开发人员更相关,在这些关键库中维护符号版本信息,以及ELF ABI支持等.我将坚持查看维护良好的基础架构包,并提供良好的autotools支持. ..


    AC_INIT"版本"真的是指由维护者包发行版本,并没有任何与库版本.该MAJOR.MINOR.MICRO不是对源代码分发一个坏主意,因为它描述了释放的年代了.

    2023-02-13 11:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有