GNU/Linux >> Belajar Linux >  >> Linux

Mengapa dentang masih membutuhkan libgcc.a untuk mengkompilasi kode saya?

Anda harus mengkompilasi dengan opsi -nodefaultlib atau -nostdlibs .

Berikut kutipan dari dokumentasi GCC (antarmuka dentang sama saja):

Salah satu pustaka standar dilewati oleh -nostdlib dan -nodefaultlibs adalah libgcc.a , perpustakaan subrutin internal yang digunakan GCC untuk mengatasi kekurangan mesin tertentu, atau kebutuhan khusus untuk beberapa bahasa.

Anda mungkin harus menjalankan rutinitas inisialisasi statis c++ dan/atau menggunakan apa yang disediakan oleh file objek crt<x>.o di direktori lib. File-file ini adalah bagian dari libc dan memberikan titik masuk yang dapat dieksekusi.


Dentang tidak disertakan dengan tautan, ia bergantung pada ld alih-alih. Dan ld tergantung pada libgcc.a dan/atau libgcc.so di sistem Anda (terlepas dari ini adalah linker LLVM ld.lld atau GNU ld). Inilah alasan mengapa Anda mendapatkan pesan kesalahan ini.

Jadi sebenarnya jawabannya adalah:

(a) penaut memerlukan libgcc untuk melakukan pekerjaan penautannya sendiri

Lebih banyak detail tentang ini tersedia di sini di omniprog.info:

Jika kita ingin menghilangkan GCC dan menggunakan dentang sebagai kompiler default kita pada sistem, kita mungkin harus membuat beberapa penyesuaian pada beberapa sistem berbasis RPM. Dentang tidak menyediakan penaut, tetapi bergantung pada penaut sistem, biasanya ld, untuk menautkan file yang dapat dieksekusi. Ini terjadi bahkan pada sistem FreeBSD dan Mac OS X di mana Dentang adalah kompiler default. Kita bisa melihat ini menggunakan opsi -v untuk dentang++. Sekarang, ld tidak akan berfungsi tanpa file-file berikut:

libgcc.a
libgcc_s.so
[...]


Linux
  1. Mengapa Anda perlu menghapus ifconfig untuk ip

  2. Hashing Kata Sandi Dan Mengapa Kami Membutuhkannya

  3. Apakah Mengubah Swappiness Perlu Reboot?

  1. Mengapa Rsync Gagal Dengan Pipa Rusak (32), Kesalahan Di Soket Io (kode 10) Di Io.c (820)??

  2. Mengapa Ubuntu Membutuhkan Dua Kernel?

  3. Mengapa kita membutuhkan mktemp?

  1. Mengapa stdout perlu pembilasan eksplisit saat dialihkan ke file?

  2. Bagaimana jika [[ $? -ne 0 ]]; berarti dalam .ksh

  3. Bisakah Clang mengkompilasi kode dengan GCC yang dikompilasi .a libs?