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 に指示する方法はありますか?
解決
リンカーのコマンドラインで-lの代わりに実際の.soファイルを渡すことができ、必要な処理を行う必要があります。
他のヒント
「-lcurl」を使用する代わりに、 "-l:libcurl.so.3"を使用し、しばしば「-l _installed_path_」も使用します
.3にリンクするプロジェクトのローカルシンボリックリンクを作成する方法については、コンパイル時に-Lを使用するだけです。ただし、名前の競合が発生するかどうかはわかりませんが、念のためlibcurl-old.soといつでも呼び出すことができます。
正しい方法は、リンカーの-filter
および-auxiliary
フラグを使用することだと思います。
これらはあまり文書化されていませんが、インストールされているマシンに応じて、同じライブラリの異なるバージョンからシンボルをロードできます。
所属していません StackOverflow