GCC で共有ライブラリの特定のバージョンにリンクするにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/828053

  •  06-07-2019
  •  | 
  •  

質問

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_pa​​th_」も使用します

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

正しい方法は、リンカーの-filter および-auxiliary フラグを使用することだと思います。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top