Automake:Makefile.am中* _la_LDFLAGS的有效值是多少?

时间:2008-10-31 16:36:15

标签: c++ shared autotools automake

我想知道Makefile.am中* _la_LDFLAGS的可能值是什么?

如果我问这个问题,那是因为我想要以下内容:

Actual shared library : libA.so (or with the version number I don't care)
Symbolic links :        libA-X.Y.Z.so, libA-X.so, libA.so 
soname :                libA-X.so

然而,这是我使用 -release 标志获得的:

Actual shared library : libA-X.Y.Z.so
Symbolic links :        libA.so 
soname :                libA-X.Y.Z.so    !!! this is not what I want 

我也试过没有任何标志并得到了

Actual shared library : libA-0.0.0.so    !!! 0.0.0 and not the real version
Symbolic links :        libA.so, libA-0.so
soname :                libA-0.so        !!! 0.0.0 and not the real version

我该怎么办?我应该使用哪面旗帜?

提前致谢

2 个答案:

答案 0 :(得分:2)

你应该使用Libtool的-version-info选项来指定库的接口版本,但一定要阅读 how versioning works(或here官方手册。)

您还可以使用-release来使您的软件包的版本号更加明显,但我怀疑您是否会获得您想要的确切命名。 Libtool有自己的一套规则来定义如何命名文件以及根据系统创建的符号链接:这些应该被视为共享库如何安装的实现细节。

答案 1 :(得分:1)

恕我直言,你想要的布局被打破了。由于soname,链接到您的库的应用程序将依赖于libA-X.so。但是当libA.so是版本X + 1时会发生什么? libA-X.so符号链接指向什么?

使用-release标志获得的布局背后的想法是,当应用程序与-lA链接时,它将导致它与最新版本链接。然后,由于soname,它将在运行时依赖于libA-X.Y.Z.so。当您安装新版本的库时,它将安装一个新的libA-X.Y.Q.so,但它将保留旧版本 - 完全与依赖它的旧应用程序相同。由于libA符号链接,新应用程序仍然会链接到最新版本。

一些非常聪明的人多年的思考已经进入了一个版本控制方案,允许新的应用程序链接到最新版本的库,同时允许多个版本和平共存以满足需要它们的应用程序的依赖关系。我的建议是,不要猜测所有这一切。