GNU/Linux >> Belajar Linux >  >> Linux

Tautan statis Linux sudah mati?

Menurut saya ini sangat mengganggu, dan menurut saya arogan menyebut fitur "tidak berguna" karena memiliki masalah dalam menangani kasus penggunaan tertentu. Masalah terbesar dengan pendekatan glibc adalah bahwa ia meng-hard-code jalur ke pustaka sistem (gconv dan juga nss), dan karenanya rusak ketika orang mencoba menjalankan biner statis pada distribusi Linux yang berbeda dari yang dibuatnya.

Lagi pula, Anda dapat mengatasi masalah gconv dengan menyetel GCONV_PATH untuk menunjuk ke lokasi yang sesuai, ini memungkinkan saya mengambil binari yang dibuat di Ubuntu dan menjalankannya di Red Hat.


Penautan statis kembali meningkat!

  • Linus Torvalds mendukung penautan statis, dan menyatakan keprihatinan tentang jumlah penautan statis dalam distribusi Linux (lihat juga diskusi ini).
  • Banyak (kebanyakan?) Go executable bahasa pemrograman ditautkan secara statis.
    • Peningkatan portabilitas dan kompatibilitas mundur adalah salah satu alasan mereka menjadi populer.
  • Bahasa pemrograman lain memiliki upaya serupa untuk membuat penautan statis menjadi sangat mudah, misalnya:
    • Haskell (Saya sedang mengerjakan upaya ini)
    • Zig (lihat di sini untuk detailnya)
  • Distribusi Linux yang dapat dikonfigurasi / set paket seperti NixOS / nixpkgs memungkinkan untuk menautkan sebagian besar paket mereka secara statis (misalnya, pkgsStatic set paket dapat menyediakan semua jenis executable yang terhubung secara statis).
  • Penautan statis dapat menghasilkan penghapusan kode yang tidak terpakai yang lebih baik pada waktu penautan, membuat executable menjadi lebih kecil.
  • libc seperti musl buat penautan statis menjadi mudah dan benar.
  • Beberapa industri perangkat lunak besar pemimpin menyetujui hal ini. Misalnya Google sedang menulis libc baru yang ditargetkan pada penautan statis ("mendukung penautan statis non-PIE dan statis-PIE" , "kami tidak bermaksud untuk berinvestasi pada saat ini [dalam] dukungan pemuatan dan penautan dinamis" ).

Mengenai fakta itu, apakah sekarang ada cara yang masuk akal untuk membuat build statis yang berfungsi penuh di Linux atau penautan statis benar-benar mati di Linux?

Saya tidak tahu di mana menemukan referensi bersejarah, tapi ya, tautan statis sudah mati pada sistem GNU. (Saya yakin itu mati selama transisi dari libc4/libc5 ke libc6/glibc 2.x.)

Fitur tersebut dianggap tidak berguna karena:

  • kerentanan keamanan. Aplikasi yang ditautkan secara statis bahkan tidak mendukung pemutakhiran libc. Jika aplikasi ditautkan pada sistem yang mengandung kerentanan lib, maka itu akan diabadikan dalam executable yang ditautkan secara statis.

  • Kembung kode. Jika banyak aplikasi yang terhubung secara statis dijalankan pada sistem yang sama, pustaka standar tidak akan digunakan kembali, karena setiap aplikasi berisi salinan semuanya di dalam dirinya sendiri. (Coba du -sh /usr/lib untuk memahami sejauh mana masalahnya.)

Coba gali arsip daftar surat LKML dan glibc dari 10-15 tahun yang lalu. Saya cukup yakin sudah lama melihat sesuatu yang berhubungan dengan LKML.


Linux
  1. Bagaimana menangani perpustakaan dinamis dan statis di Linux

  2. Cara mengubah nama host statis di RHEL7 linux dengan hostnameectl

  3. Bagaimana cara menambahkan rute statis baru di RHEL7 Linux

  1. Cara Mengatur Alamat IP Statis dan Konfigurasi Jaringan di Linux

  2. menautkan <iostream.h> di linux menggunakan gcc

  3. Tautan dinamis - Linux Vs. Windows

  1. Siapkan koneksi jaringan statis di Linux

  2. Perintah mv Linux

  3. Menautkan libc++ ke proyek CMake di Linux