我想知道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
我该怎么办?我应该使用哪面旗帜?
提前致谢
答案 0 :(得分:2)
你应该使用Libtool的-version-info
选项来指定库的接口版本,但一定要阅读
how versioning works(或here官方手册。)
您还可以使用-release
来使您的软件包的版本号更加明显,但我怀疑您是否会获得您想要的确切命名。 Libtool有自己的一套规则来定义如何命名文件以及根据系统创建的符号链接:这些应该被视为共享库如何安装的实现细节。
答案 1 :(得分:1)
使用-release标志获得的布局背后的想法是,当应用程序与-lA链接时,它将导致它与最新版本链接。然后,由于soname,它将在运行时依赖于libA-X.Y.Z.so。当您安装新版本的库时,它将安装一个新的libA-X.Y.Q.so,但它将保留旧版本 - 完全与依赖它的旧应用程序相同。由于libA符号链接,新应用程序仍然会链接到最新版本。
一些非常聪明的人多年的思考已经进入了一个版本控制方案,允许新的应用程序链接到最新版本的库,同时允许多个版本和平共存以满足需要它们的应用程序的依赖关系。我的建议是,不要猜测所有这一切。