Bagaimana saya bisa membangun gcc yang lebih lama (khususnya, 4.5.2) di Ubuntu 11.10 dan menghindari kesalahan tentang "/ usr / bin / ld: tidak dapat menemukan crti.o: Tidak ada file atau direktori"?
Saya telah melakukan sedikit penggalian dan menemukan beberapa item serupa, tetapi tidak ada yang benar-benar menyelesaikan masalah saya:
- Saya telah memverifikasi semua paket saya (libc6-dev dan sejenisnya) diinstal ulang per pertanyaan ini
- Saya telah memverifikasi crti.o ada di / usr / lib32 dan / usr / lib / x86_64-linux-gnu, dan bahwa ld.so.conf saya dikonfigurasi untuk mencari di direktori tersebut
- Saya telah memverifikasi bahwa menambahkan permintaan make saya dengan LIBRARY_PATH = / usr / lib / x86_64-linux-gnu berfungsi, tetapi ingin menghindari ini (ini menjadi titik divergen dalam makefiles)
- Saya sudah mencoba berbagai hal dengan --with-build-sysroot, tetapi tidak berhasil (baca: mungkin saya tidak tahu flag yang tepat untuk diatur)
Saat menjalankan dengan strace (sesuai jawaban ini ), saya bisa melihat referensi telanjang ke crti.o:
13240 terbuka ("crti.o", O_RDONLY) = -1 ENOENT (Tidak ada file atau direktori seperti itu)
Terima kasih!
Bahkan versi baru GCC gagal dengan pesan itu. Itu karena rilis Debian / Ubuntu yang baru (akan) mendukung multiarch (yaitu menginstal binari untuk beberapa mesin dalam satu sistem file), sehingga perpustakaan telah dipindahkan dari tempat-tempat standar.
Ada tambalan GCC untuk memperbaikinya di sini (belum final versi yang disetujui, tetapi benar untuk Ubuntu), dan mereka mungkin berlaku untuk GCC yang lebih tua tanpa banyak usaha, mungkin. Saya pikir Anda perlu mengkonfigurasi GCC dengan --enable-multiarch , atau sesuatu.
Sementara itu, membuat tautan lunak adalah perbaikan yang bagus:
(nama folder akan berbeda pada instalasi 32-bit).
Semoga itu bisa membantu.
sumber
Saya memecahkan masalah ini dengan beberapa solusi yang mungkin berguna bagi Anda.
Pertama, buat GCC dengan
LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
, sehingga proses membangun bootstrap tahu di mana menemukancrt?.o
file mulai.Kemudian, alih-alih membuat
crt?.o
symlink di/usr/lib
mana mereka mempengaruhi seluruh sistem Anda, Anda dapat symlink ketiga file ke${prefix}/lib/gcc/...
direktori yang sesuai dengan${prefix}/bin
direktori tempatgcc
executable diinstal. Itu sebenarnya hampir di bagian atas jalur pencarian untuk file mulai, jadi itu akan menemukan mereka - tetapi mereka tidak mempengaruhi hal lain.Dalam kasus saya, direktori khusus untuk meletakkannya adalah
lib/gcc/x86_64-unknown-linux-gnu/4.3.2/
; Anda dapat menemukan yang tepat karena sudah memiliki file lain seperticrtbegin.o
di dalamnya.sumber
Saya membangun GCC 4.1.2 di x86_64 tepat Ubuntu. Seperti yang Anda lakukan, saya melihat strace dari perintah terakhir "xgcc" mencari runtime c 32bit, grep-ped / 32 / sebagai berikut. C runtime di tambang ada di / usr / lib32 yang disediakan oleh paket libc6-dev-i386.
Jadi, saya membuat crt? .O mencari symlink di direktori xgcc.
Saya berhasil membangun GCC 4.1.2 dengan itu.
sumber