web-dev-qa-db-ja.com

リンク時に使用するライブラリのバージョンを指定するにはどうすればよいですか?

次の質問 アプリケーションは実行時に共有ライブラリの異なるバージョンにどのように解決されますか? 、使用するライブラリのバージョンをリンクコマンドラインで指定する方法を知りましたか?

私が持っているとしましょう

libmy.so.1.0
libmy.so.1    -> libmy.so.1.0
libmy.so.2.0
libmy.so.2    -> libmy.so.2.0
libmy.so      -> libmy.so.2

実行可能ファイルとリンクするライブラリを指定する通常の方法では、使用するバージョンが表示されません。さらに、最新バージョンとリンクしたいと思う可能性が非常に高いです。したがって、ほとんどの場合、通常の回線は正常に機能します。

gcc app.o -lmy -o app

ライブラリのバージョン1を使用する必要があるappをリンクするコマンドラインは何ですか?

29
Didier Trosset

リンカはファイル名も受け入れることができます

gcc  app.o -l:libmy.so.1 -o app

man ldから:

-l namespec
-library = namespec
namespecで指定されたアーカイブまたはオブジェクトファイルをリンクするファイルのリストに追加します。このオプションは何度でも使用できます。 namespecの形式が:filenameの場合、ldはライブラリパスでfilenameというファイルを検索します。それ以外の場合は、ライブラリパスでfilenameというファイルを検索します。 libnamespec.a。

古いバージョンではサポートされていないことに気付いたので、システムのman ld-lまたは--libraryオプションを確認してください。

フルネームを記載したファイルにリンクすることもできます

gcc  app.o /mylibpath/libmy.so.1 -o app
40
Dmitry Yudakov