デバッグを支援するために、システムライブラリ、libc、pthreadsを静的にリンクする

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

質問

このスタックオーバーフローエントリに記載されている状況を避けようとしています。顧客のボックスで生成されたコアファイルのデバッグ。すべてのライブラリを静的にコンパイルすると、コアダンプのときに共有ライブラリを常に収集する必要がないのですか?私は基本的にGDBを使ってコアファイルをロードしてクラッシュしたアプリケーションを調べることができる状況にあります。

必要なすべてのライブラリを静的にリンクしているルートを停止した場合はどうすればよいでしょう。私はglibとpthreadsが最大の問題を引き起こすかもしれません。

ヴァルグランドは役に立ちませんか?静的にコンパイルされたすべてのバイナリに対してvalgrindをロードすると、エラーが見つかりますか?それともvalgrindが働き続けるように静的にコンパイルされていないバイナリを維持します。 ストレートはどうですか?

大きなインストールベースがあるので、私たちはかなり頻繁にクラッシュし、それはレガシーアプリケーションです。すべての共有ライブラリを集めることは難解になりつつあります - 私は別の解決策が必要です。

編集:Typoを修正しました。

役に立ちましたか?

解決

すべてのライブラリを静的にコンパイルした場合、コアダンプのときに共有ライブラリを常に収集する必要がないようにします。

はい。

しかし、人気のある信念とは反対に、静的に連携したバイナリは、動的にリンクされたものよりもポータブル(少なくともLinux上で)です。 特に、gethostbynamegethostbyaddrgetpwentgetpwnamgetpwuid(およびLot Oll Lot)は、これと同様に、リンク時に警告を受けることができます。

Using 'getpwuid' in statically linked applications requires at runtime
the shared libraries from the glibc version used for linking.
.

この警告手段は、があなたがリンク時に使用したものからインストールされたGlibcの異なるバージョンのglibcを持っていることです(つまりシステムlibcとは異なります)。それであなたのプログラムはクラッシュする可能性があります。それはあなたの現在のものより明らかに悪い状況であるので、私は静的リンクはあなたのための良い解決策です。

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