Linux .so 文件的 Autoconf 版本控制不正确

问题描述 投票:0回答:1

我正在尝试使用 autoconf 创建 Linuz 动态链接共享库 (.so),但是,无论我做什么,它都会错误地版本化该文件。我得到的是 libWebLoom.so.0.0.1 而不是 libWebLoom.so.0.1.0。

我不确定我做错了什么,我已经通过autconf的帮助,但我无法解决它。

/Makefile.am

ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src

/src/Makefile.am

SUBDIRS = WebLoom

/src/WebLoom/Makefile.am

AM_CPPFLAGS = -g -std=c++17 -Wall -Wextra -fPIC -I.
lib_LTLIBRARIES = libWebLoom.la
libWebLoom_la_SOURCES = Context.cpp

libWebLoom_la_LDFLAGS = -version-info $(LT_VERSION)

libWebLoom_la_LIBADD = $(LDADD)

CLEANFILES = $(lib_LTLIBRARIES)

/configure.ac

AC_INIT([WebLoom], [0.1.0], [[email protected]])
AC_CONFIG_MACRO_DIRS([m4])
AM_INIT_AUTOMAKE([foreign subdir-objects])
LT_INIT
AC_PROG_CXX

CURRENT=$(echo $PACKAGE_VERSION | cut -d. -f1)
REVISION=$(echo $PACKAGE_VERSION | cut -d. -f2)
AGE=$(echo $PACKAGE_VERSION | cut -d. -f3)
AC_MSG_NOTICE([--- Version: $CURRENT.$REVISION.$AGE])
AC_SUBST(VERSION_MAJOR, [$CURRENT])
AC_SUBST(VERSION_MINOR, [$REVISION])
AC_SUBST(VERSION_PATCH, [$AGE]),  
LT_VERSION="$CURRENT:$REVISION:$AGE"
AC_SUBST(LT_VERSION)

AC_OUTPUT

我得到的输出是:

Nov  5 10:29 libWebLoom.a
Nov  5 10:29 libWebLoom.la -> ../libWebLoom.la
Nov  5 10:29 libWebLoom.lai
Nov  5 10:29 libWebLoom.so -> libWebLoom.so.0.0.1
Nov  5 10:29 libWebLoom.so.0 -> libWebLoom.so.0.0.1
Nov  5 10:29 libWebLoom.so.0.0.1
c++ makefile autoconf
1个回答
0
投票

Libtool 生成的共享库名称末尾的

x.y.z
并不旨在根据语义版本控制方案进行解释,并且它通常不对应于您为包的版本选择的任何语义版本号。图书馆属于哪个。 这些不匹配有很好的技术原因。 Libtool 的特定版本控制设计有其逻辑原因,但这些以及由此产生的设计是否良好则更具争议性。

您可以在 Libtool 手册第 7 章中阅读有关 Libtool 版本控制的所有内容,如果您打算使用该版本控制,则应该这样做。 您还应该了解,表达给 libtool 的三个版本参数并不直接映射到共享库名称末尾的数字三元组。 前者供 Libtool 使用,而后者是供其他软件(例如链接器)使用的摘要形式。

如果您想使用包的语义版本号标记 libtool 构建的共享库,则可以使用

-release

 标志而不是库的 
-version-info
 中的 
LDFLAGS
 标志。  这会将版本号合并到库的基本名称中,但请注意:其中一个影响是包的任何两个版本都不会彼此二进制兼容。

© www.soinside.com 2019 - 2024. All rights reserved.