古いバージョンの libc とリンクすることで、より大きなアプリケーションカバレッジを提供します。
2023-12-20 13:26:46
質問
Linux のバイナリは通常、コアシステムライブラリ (libc) に動的にリンクされています。これによりバイナリのメモリフットプリントは非常に小さく保たれますが、最新のライブラリに依存するバイナリは古いシステム上では動作しません。逆に、古いライブラリにリンクされたバイナリは、最新のシステムで問題なく動作します。
したがって、配布中にアプリケーションが良好なカバレッジを持つことを確実にするために、サポートできる最も古い libc を把握し、それに対してバイナリをリンクする必要があります。
どのようにリンクできる最も古いバージョンの libc を決定すればよいのでしょうか。
どのように解決するのですか?
実行ファイル内のどのシンボルが、望ましくないバージョンの glibc への依存を作り出しているかを調べてください。
$ objdump -p myprog
...
Version References:
required from libc.so.6:
0x09691972 0x00 05 GLIBC_2.3
0x09691a75 0x00 03 GLIBC_2.2.5
$ objdump -T myprog | fgrep GLIBC_2.3
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.3 realpath
古いバージョンにリンクできるシンボルがあるかどうか、dependent-upon ライブラリ内を調べてください。
$ objdump -T /lib/libc.so.6 | grep -w realpath
0000000000105d90 g DF .text 0000000000000021 (GLIBC_2.2.5) realpath
000000000003e7b0 g DF .text 00000000000004bf GLIBC_2.3 realpath
運がいい!
からバージョンを要求する。
GLIBC_2.2.5
をコードに追加してください。
#include <limits.h>
#include <stdlib.h>
__asm__(".symver realpath,realpath@GLIBC_2.2.5");
int main () {
realpath ("foo", "bar");
}
GLIBC_2.3 はもはや必要ないことに注意してください。
$ objdump -p myprog
...
Version References:
required from libc.so.6:
0x09691a75 0x00 02 GLIBC_2.2.5
$ objdump -T myprog | grep realpath
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 realpath
さらに詳しい情報は http://web.archive.org/web/20160107032111/http://www.trevorpounds.com/blog/?p=103 .
関連
-
LinuxでPingを無効にする、または許可する設定方法
-
Manjaro linuxでマウスの速度を設定する方法は?Manjaroのマウスのカーソル速度を設定する方法に関するヒント
-
deepinシステムのバージョン番号を見るには?deepinシステムのバージョン情報を見るコツ
-
deepin20のソフトをアンインストールする方法を教えてください。deepinのアプリケーションをアンインストールする2つの方法
-
TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み] WindowsからLinuxへのscpにputtyを使用する
-
[解決済み] エラーです。Can't open display: (null)と表示されることがあります。
-
[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?
-
[解決済み] POSIX」の意味を教えてください。
-
[解決済み] 特定のglibcのバージョンにリンクするにはどうしたらいいですか?
最新
-
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のisoイメージを作る方法(グラフィックチュートリアル)
-
Linux ddコマンド詳細説明:データのバックアップ、およびバックアッププロセスでのフォーマット変換のケース
-
rsyncとinotfiyの組み合わせでリアルタイムバックアップ問題を実現
-
Linux Mintでフェード効果をオンにする方法は?
-
TclError: 表示名がなく、$DISPLAY環境変数もない。
-
Apache の一般的な設定エラー
-
[解決済み] 標準エラー出力を /dev/null にリダイレクトする。
-
[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?
-
[解決済み] 複数のPDFファイルを1つのPDFに結合/変換する【終了】。
-
[解決済み] bashスクリプトでset -eはどういう意味ですか?