Saya memiliki sistem Debian virtual yang saya gunakan untuk mengembangkan.
Hari ini saya ingin mencoba llvm / clang.
Setelah menginstal clang saya tidak dapat mengkompilasi c-proyek lama saya (dengan gcc). Ini adalah kesalahannya:
...
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status
...
Saya mencopot pemasangan dentang dan tetap tidak berhasil.
Apakah ada yang tahu bagaimana saya bisa memperbaikinya?
libc0.1-dev
.Jawaban:
Debian / Ubuntu
Masalahnya adalah kemungkinan besar Anda hanya memiliki gcc untuk arsitektur Anda saat ini dan itu 64bit. Anda membutuhkan file dukungan 32bit. Untuk itu, Anda perlu menginstalnya
sumber
sudo apt-get install gcc-multilib
dan memperbaiki kesalahan saya darigfortran -m32 ...
Yang membantu saya adalah membuat tautan simbolis:
sumber
Tampaknya ketika Anda bermain dengan llvm / clang Anda (atau manajer paket) menghapus paket pengembangan perpustakaan C standar yang ada sebelumnya ( eglibc di Debian) atau mungkin Anda tidak menginstalnya sejak awal, jadi Anda perlu menginstal ulang itu, sekarang Anda kembali ke gcc.
Anda dapat melakukannya seperti ini di Debian:
Ubuntu:
Di Ubuntu, jika Anda tidak memiliki libc-dev, karena saya tidak dapat menemukannya di packages.ubuntu.com, Anda dapat mencoba menginstal libc6-dev secara langsung.
Atau pada sistem seperti Redhat:
NB: Meskipun Anda dijawab secara singkat di komentar, berikut adalah jawaban agar ada satu yang tercatat jika seseorang menemukan yang ini dan mungkin mencari jawaban, tetapi tidak di komentar atau komentar tersebut tidak cukup eksplisit untuk mereka .
sumber
apk add libc-dev=0.7.1-r0
Ini adalah BUG yang dilaporkan di launchpad, tetapi ada solusinya:
Jalankan ini untuk melihat di mana file-file ini berada
lalu tambahkan jalur ini ke variabel LIBRARY_PATH
sumber
Jika Anda menggunakan versi Pengujian Debian, yang disebut 'wheezy', Anda mungkin telah digigit oleh perpindahan ke multiarch. Lebih lanjut tentang multiarch Debian di sini: http://wiki.debian.org/Multiarch
Pada dasarnya, yang terjadi adalah berbagai perpustakaan khusus arsitektur dipindahkan dari tempat tradisional dalam sistem file ke tempat khusus arsitektur baru. Ini sebabnya
/usr/bin/ld
bingung.Anda akan menemukan crt1.o di keduanya
/usr/lib64/
dan/usr/lib/i386-linux-gnu/
sekarang dan Anda harus memberi tahu toolchain Anda tentang itu. Berikut beberapa dokumentasi tentang cara melakukannya; http://wiki.debian.org/Multiarch/LibraryPathOverviewPerhatikan bahwa hanya membuat symlink hanya akan memberi Anda satu arsitektur dan pada dasarnya Anda akan menonaktifkan multiarch. Meskipun ini mungkin yang Anda inginkan, mungkin ini bukan solusi yang optimal.
sumber
Setelah membaca http://wiki.debian.org/Multiarch/LibraryPathOverview yang dikirim jeremiah, saya menemukan flag gcc yang berfungsi tanpa symlink:
Jadi, Anda bisa menambahkan
-B/usr/lib/x86_64-linux-gnu
variabel CFLAGS di Makefile Anda.sumber
Untuk mendapatkan RHEL 7 64-bit untuk mengkompilasi program gcc 4.8 32-bit, Anda perlu melakukan dua hal.
Pastikan semua alat pengembangan 32-bit gcc 4.8 telah diinstal sepenuhnya:
Kompilasi program menggunakan tanda -m32
dicuri dari sini: Bagaimana cara Mengkompilasi Aplikasi 32-bit di 64-bit RHEL? - Saya hanya perlu melakukan langkah 1.
sumber
Seperti yang dijelaskan dalam file crti.o yang hilang , lebih baik gunakan "gcc -print-search-dirs" untuk mengetahui semua jalur pencarian. Kemudian buat link seperti yang dijelaskan di atas "sudo ln -s" untuk menunjuk ke lokasi crt1.o
sumber
Ini bekerja untuk saya dengan Ubuntu 16.04
sumber
./configure --disable-multilib
bekerja untuk itu
sumber
Bertemu ini di CentOs 5.4. Perhatikan bahwa lib64 berisi file crt * .o, tetapi lib tidak. Menginstal glibc-devel melalui yum yang menginstal i386 bits dan ini menyelesaikan masalah saya.
sumber
Bahkan saya mendapat kesalahan kompilasi yang sama ketika saya melakukan kompilasi silang i686-cm-linux-gcc.
Opsi kompilasi di bawah ini memecahkan masalah saya
Catatan: Sysroot harus menunjuk ke direktori compiler di mana usr / include tersedia
Dalam kasus saya, toolchain diinstal di / opt / toolchain / i686-cm-linux-gcc direktori dan usr / include juga tersedia di direktori yang sama
sumber
Saya menyelesaikannya sebagai berikut:
1) mencoba untuk menemukan file ctr1.o dan ctri.o dengan menggunakan
find -name ctr1.o
Saya mendapatkan yang berikut di komputer saya:
$/usr/lib/i386-linux/gnu
2) Tambahkan jalur itu ke
PATH
(jugaLIBRARY_PATH
) variabel lingkungan (untuk melihat yang merupakan nama: ketikenv
perintah di Terminal):sumber
Saya memiliki masalah yang sama hari ini, saya menyelesaikannya dengan menginstal paket yang direkomendasikan: libc6-dev-mipsel-cross libc6-dev-mipsel-cross, libc-dev-mipsel-cross
Ini berhasil:
sumber
Dalam kasus saya, kesalahan crti.o disebabkan oleh konfigurasi jalur eksekusi dari Matlab. Misalnya, Anda tidak dapat menjalankan file jika Anda belum menyetel jalur direktori eksekusi Anda sebelumnya. Untuk melakukan ini: File> setPath, tambahkan direktori Anda dan simpan.
sumber
menggunakan
gcc -B lib_path_containing_crt?.o
sumber
Dalam kasus saya,
Ubuntu 16.04
saya tidak memilikicrti.o
sama sekali:Jadi saya menginstal paket pengembang libc 6 -dev:
sumber