Linuxのスタティックリンクは死んだのか?
質問
実際には -静的 フラグは現在動作していません。GNU libcのFAQから引用してみます。
2.22. 静的にリンクされたプログラムでさえ、いくつかの共有ライブラリを必要とします。 というのは、私には受け入れがたいことです。どうしたらよいでしょうか。 はどうすればよいのでしょうか?
{AJ} NSS (詳細については、`info libc "ネームサービススイッチ"'と入力してください。 は共有ライブラリなしでは正しく動作しません。 は、共有ライブラリがないと正しく動作しません。 NSSでは、異なる NIS、files、db、hesiodなど)を使うことができます。 を使うことができます。 を変更するだけで、異なるサービス(NIS、ファイル、DB、hesiod)を利用できます。 を変更するだけで、異なるサービス(NIS, files, db, hesiod)を利用できます。 唯一の欠点は 唯一の欠点は、静的 ライブラリが共有ライブラリにアクセスする必要があることです。 にアクセスする必要があることです。 これはGNU Cライブラリによって透過的に処理されます。 GNU Cライブラリによって透過的に処理されます。
解決策としては、glibcを設定する際に --を設定することです。 この場合、静的なバイナリを作成することができます。 dnsとfilesのサービスのみを使用する静的バイナリを作成することができます。 を使用する静的バイナリを作成できます (このために /etc/nsswitch.conf を変更します)。 これらのサービスに対して明示的にリンクする必要があります。 に対して明示的にリンクする必要があります。例えば
gcc -static test-netdb.c -o test-netdb \ -Wl,--start-group -lc -lnss_files -lnss_dns -lresolv -Wl,--end-group
この方法の問題点は NSS ルーチンを使用するすべての静的プログラムを NSSルーチンを使用するすべての静的プログラムを をリンクしなければならないことです。
{UD}です。実際、このオプションでコンパイルされた libc が NSS を使っているとはもう言えません。 が NSS を使っているとは言えません。 スイッチもありません。 はもうありません。 したがって、それは 非常に 推奨 ではない を使用しないことを推奨します。 --これは、システム上のプログラムの動作に一貫性がなくなるからです。 の動作に一貫性がなくなるからです。
この事実に関して、Linux で完全に機能する静的ビルドを作成する合理的な方法はあるのでしょうか、それとも Linux では静的リンクは完全に死んでいるのでしょうか?私は、静的ビルドを意味します。
- 動的ビルドとまったく同じように動作する 動的ビルドと全く同じように動作します (動作に一貫性のない静的 は邪道だ!)。
- glibc 環境と Linux バージョンの妥当なバリエーションで動作します。
どのように解決するのですか?
<ブロッククオートこの事実に関して、Linux で完全に機能する静的ビルドを作成する合理的な方法はありますか、それとも Linux での静的リンクは完全に死んでいますか?
歴史的なリファレンスをどこで見つけるかわかりませんが、そうです。 静的リンク は GNU システム上では死んでいます。(私は、libc4/libc5 から libc6/glibc 2.x への移行の間に死んだと信じています)。
に照らして、この機能は無駄だと判断されました。
-
セキュリティの脆弱性。静的にリンクされたアプリケーションは、libc のアップグレードをサポートさえしません。もしアプリケーションが lib の脆弱性を含むシステム上でリンクされたなら、静的にリンクされた実行ファイル内でそれが永続することになります。
-
コードの肥大化。もし多くの静的にリンクされたアプリケーションが同じシステム上で実行されるなら、標準ライブラリは再利用されないでしょう。(試しに
du -sh /usr/lib
を試してみてください)。
10-15年前のLKMLとglibcのメールリストアーカイブを掘ってみてください。確かに昔、LKMLで関連するものを見たことがあります。
関連
-
deepinシステムのバージョン番号を見るには?deepinシステムのバージョン情報を見るコツ
-
Centos7のインストールと展開無料のconfluence wikiの(知識ベース)詳細な操作手順
-
deepin20ターミナルでサーバーをリモート管理する方法
-
[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
-
[解決済み] Linux で grep を使ってファイル名だけを表示するにはどうしたらいいですか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] Linuxのディレクトリ内のファイルを再帰的にカウントする
-
[解決済み】スタティックリンクとダイナミックリンクの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Linux sarコマンドによるシステム性能の詳細解析事例
-
centos7 インストール クリックハウスとセット ユーザー名 パスワード ケース 詳細
-
Linux NICがRTNETLINK answersというエラーで起動できない場合、どうすればよいですか?ファイルが存在するか?
-
TclError: 表示名がなく、$DISPLAY環境変数もない。
-
makeの低レベルエラー:セパレータストップがない
-
apache startup error (98) Address already in use: make_sock: could not bind to...
-
[解決済み] libstdc++.so.5: 共有オブジェクトファイルを開くことができない - しかしライブラリはインストールされており最新である
-
[解決済み] POSIX」の意味を教えてください。
-
[解決済み] bashスクリプトでset -eはどういう意味ですか?
-
[解決済み】スタティックリンクとダイナミックリンクの比較