1

我想知道 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

我应该怎么做 ?我应该使用哪个标志?

提前致谢

4

2 回答 2

2

您应该使用-version-infoLibtool 的选项来指定库的接口版本,但请务必阅读 版本控制的工作原理(或此处获取官方手册。)

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

于 2008-11-01T08:47:29.910 回答
1

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

使用 -release 标志获得的布局背后的想法是,当应用程序与 -lA 链接时,它将导致它与最新版本链接。然后,由于 soname,它将在运行时依赖于 libA-XYZso。当您安装新版本的库时,它将安装一个新的 libA-XYQso,但它会留下旧的 - 就像依赖它的旧应用程序所期望的那样。由于 libA 符号链接,新应用程序仍将链接到最新版本。

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

于 2008-11-01T15:38:30.893 回答