2012-04-30 22 views
5

私のプログラムは、ローダーと共有ライブラリである多くのモジュールとして構築されています。現在、これらのライブラリの1つはpthreadを使用しており、動的にモジュールにバインドされているようです(起動時にロードされます)。今では、pthreadをモジュールファイルにリンクさせることができれば簡単になります。 LinuxのGCC、どうすればいいですか?私はlibpthread.aが必要だと思います...GCCに静的リンクを強制します。 pthreads(動的リンクではない)

+0

どのような場合に、pthreadヘッダーを組み込む以外に何かする必要がありますか?ソースの例がありますか?この絶対的な必要性をコンパイルする方法はありますか? –

答えて

16

libpthread.aを共有ライブラリにリンクすることは、理論的には可能ですが、実際にはという悪い考えです。その理由は、libpthreadglibcの一部であり、すべて部分のglibcが正確に一致する必要があります。そうでないと、奇妙で​​説明できないクラッシュが発生します。

だからあなたの共有ライブラリにlibpthread.aのリンクは以下となります。

  • glibcの異なるバージョンのマシンに移動するとき、あなたの現在のマシンのglibcがあるときに、既存のプログラムがクラッシュするあなたのプログラムがクラッシュする

    1. 原因アップグレードされましたが、モジュールは更新されたlibpthread.aに対して再リンクされません。

    あなた自身の疲労を癒してください。そうしないでください。

  • +0

    :オハイオ州オハイオ州オハイオ州オハイオ州オハイオ州オハイオ州私のオハイオ州グッド、それはあなたがそれを述べる。しかし、glibcのその部分は... /私はderped .. – imacake

    +1

    ありがとう。答えのように。しかし、質問 - libpthreadがlibc/glibcの一部である場合、なぜそれが別のライブラリとして提供されるのですか?ほとんどすべてのlibsはlibcにリンクし、libpthreadの必要性は何ですか? – Kiran

    +0

    @Kiran「なぜ別のライブラリとして提供されるのですか」 - 多くのプログラムはスレッドを必要とせず、 'libpthread'のリンクは不要なオーバーヘッドをプログラム。 –

    関連する問題