0

私はgcc他のどのコンパイラよりも多く使用しているので、このコンパイラスイートを使用して例を作成しますが、、、、などgcc、試したほとんどすべてのスイートでこの問題が発生しましmingwた。clangmsvc

gccこのフラグを提供します:

  • -l名前fooを入力すると、gccは対応するライブラリを検索します。libfoo
  • -Lライブラリが存在するパスを追加すると、gccは必要なライブラリをそのパスで見つかったライブラリと一致させようとします
  • -rpath基本的に、同じライブラリの異なるパスのプールであるため、実行可能ファイルは、必要に応じて代替を探すのに十分な「スマート」です。

問題は私にとって大きなものであり、これが私の問題を解決するものはなく、このフラグのそれぞれが同じ問題、つまりあいまいさを抱えています。

最良のシナリオにあいまいさを含めずにこれを行う方法がないとわかっているライブラリをリンクしたいだけの場合、私が望むのは次のとおりです。

  • 1つの特定のライブラリのみをリンクし、正確な名前とパスで指定した1つのみをリンクします
  • -l私のライブラリには名前が付けられてfoo.soいないため、与えられた名前のようなオートコンプリートメカニズムは避けてくださいlibfoo.so
  • リンクされたライブラリの相対パス
  • 明示的に指定されたライブラリのセットのみを考慮してください。他の自動化は必要ありません。ライブラリのプール、検索パス、その他はありません。ランダムなライブラリにリンクされた実行可能ファイルではなく、エラーのリストを使用します。

私はさまざまなリリースのさまざまなライブラリを扱うことがよくあります。歴史的および互換性の理由から同じ名前を共有することがよくあります。実行可能ファイルにリンクしたいライブラリを取得できなかったため、コンパイルしてgccにリンクするのは悪夢です。

ありがとう。

4

1 に答える 1

1

これを行う最も簡単な方法は、単にライブラリを指定することです。

gcc -o test test.o /path/my_library.so /path/to_other_library.a

このアプローチの明らかな欠点は、もちろん、そのライブラリを移動するとアプリケーションが機能しなくなることですが、ライブラリが固定の場所にあると述べているため、ケースでは機能するはずです。

于 2012-11-28T06:10:36.930 に答える