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-infoライブラリのインターフェイス バージョンを指定するには、Libtool のオプションを使用する必要がありますが、バージョン管理のしくみ(公式マニュアルについてはこちら) を必ずお読みください。

さらに、パッケージのバージョン番号をより明確にするために使用することもできますが-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 に答える