web-dev-qa-db-ja.com

GCCで共有ライブラリの特定のバージョンにどのようにリンクしますか

Debian Linuxシステムでlibcurlを使用するコードをコンパイルしています。私の開発マシンではDebian 5を実行していますが、古いDebian 4システムでもバイナリを使用できるようにしたいと思っています。

-lcurlを指定すると、libcurl.so.4にリンクしますが、Debian 4システムにはlibcurl.so.3しかありません。

Libcurl.so.3(Debian 4と5の両方に存在)またはlibcurl.soにリンクするようにGCCに指示できる方法はありますか?

41
Adam Pierce

リンカのコマンドラインで-lの代わりに実際の.soファイルを渡すことができ、必要な処理を実行する必要があります。

29
bdonlan

「-libcurl」を使用する代わりに「-l:libcurl.so.3」を使用してください。もちろん「-L _ installed_pa​​th _」も使用してください

71
engineer.udays

そのための正しい方法は、--filterおよび--auxiliaryリンカのフラグ。

それらはあまり文書化されていませんが、インストールされているマシンに応じて、同じライブラリの異なるバージョンからシンボルをロードできるはずです。

1
galk

.3にリンクするプロジェクトのローカルシンボリックリンクを作成する場合は、コンパイル時に-Lを使用できます。名前の衝突が発生するかどうかはわかりませんが、念のためlibcurl-old.soといつでも呼ぶことができます。

1
Dana the Sane