không thể tìm thấy crti.o: Không có tệp hoặc thư mục như vậy


19

Khi tôi muốn tạo gcc 4.1.2 ( ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/release/gcc-4.1.2/gcc-4.1.2.tar.bz2 ) trên của tôi ubfox 12.04 (x86_64). Gcc hoạt động hiện tại là 4.6.2. Tôi đã làm:

./configure

sau đó

make

Tuy nhiên tôi gặp lỗi này

/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status

Tìm kiếm trên web có vẻ như có một vấn đề với vị trí của crti. Những tập tin này có sẵn trên hệ thống

# find /usr/ -name crti*
/usr/lib32/crti.o
/usr/lib/x86_64-linux-gnu/crti.o
/usr/lib/debug/usr/lib/x86_64-linux-gnu/crti.o

Ngoài ra gói phát libc6 được cài đặt

# dpkg -l | grep libc6
ii  libc6                                  2.15-0ubuntu10.3                          Embedded GNU C Library: Shared libraries
ii  libc6-dbg                              2.15-0ubuntu10.3                        Embedded GNU C Library: detached debugging symbols
ii  libc6-dev                              2.15-0ubuntu10.3                        Embedded GNU C Library: Development Libraries and Header Files
ii  libc6-dev-i386                         2.15-0ubuntu10.3                        Embedded GNU C Library: 32-bit development libraries for AMD64
ii  libc6-i386                             2.15-0ubuntu10.3                        Embedded GNU C Library: 32-bit shared libraries for AMD64
ii  libc6-pic                              2.15-0ubuntu10.3                        Embedded GNU C Library: PIC archive library

Lam sao tôi co thể sửa no?

CẬP NHẬT:

Sau khi thêm chúng

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH 

Vấn đề đó đã được giải quyết. Tuy nhiên bây giờ tôi nhận được

/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.a when searching for -lc
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-gnu/crti.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-   gnu/crtn.o' is incompatible with i386 output
collect2: ld returned 1 exit status

Tôi đang nhận được các lỗi khác, về việc makeinfokhông có mặt, đó trên hệ thống của tôi. Không thể nhận lỗi của bạn với các bước này.
gertvdijk

Câu trả lời:


13

Đây là một BUG được báo cáo trong launchpad, bởi vì có một cách giải quyết:

biên dịch chương trình 64 bit trong nền tảng 32 bit:

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH

cho 32 bit gốc:

LIBRARY_PATH=/usr/lib32:$LIBRARY_PATH
export LIBRARY_PATH

Điều đó trong tệp .bashrc của bạn (hoặc được chạy từ bảng điều khiển) là đủ để GCC tìm vị trí mới của thư viện.

cám ơn. đến Iain Buclaw (ibuclaw) để chỉ ra đúng hướng.

12.10 32 bit

hhlp@hhlp:~$ sudo find /usr/ -name crti*
/usr/lib/i386-linux-gnu/crti.o
hhlp@hhlp:~$ 

LIBRARY_PATH=/usr/lib/i386-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH

12.10 64 bit

hhlp@hhlp:~$ sudo find /usr/ -name crti*
/usr/lib/x86_64-linux-gnu/crti.o
hhlp@hhlp:~$ 

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH

Vấn đề đó đã được giải quyết. Tuy nhiên lỗi mới tôi nhận được. Xin vui lòng xem bài viết gốc
mahmood

2
Cảm ơn nhưng đó không phải là giải pháp cho vấn đề thứ hai. Tôi thấy rằng tôi phải làm ./configure --disable-multilibvà xây dựng lại từ đầu theo gcc.gnu.org/ml/gcc-help/2009-05/msg00238.html Cảm ơn sự giúp đỡ của bạn
mahmood

Không hoạt động với Ubuntu 16.04 và bản dựng của tôi.
Niklas

Tôi phải đối mặt với cùng một vấn đề, nhưng trong khi chạy make installnhư bước cuối cùng. Tôi đã thiết lập LIBRARY_PATH nhưng không có kết quả !! Bất kỳ trợ giúp đánh giá cao
faizan

1
Sau khi sử dụng, tôi gặp phải vấn đề "Thư mục hiện tại không nên có trong LIBRARY_PATH` do LIBRARY_PATH trống trước đó. Do đó, hãy sử dụng export LIBRARY_PATH="/usr/lib/x86_64-linux-gnu${LIBRARY_PATH+:$LIBRARY_PATH}"hoặc (nếu bạn biết nó trống)export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
Flamefire

1

Trong trường hợp Ubuntu 16.04của tôi, tôi không có gì crti.ocả:

$ find /usr/ -name crti*

Vì vậy, tôi cài đặt gói nhà phát triển:

sudo apt-get install libc6-dev

0

Xây dựng GCC 4.8 trên x86-64 từ các nguồn ngược dòng mà bạn gặp phải vấn đề cần xây dựng cả thư viện 32 và 64 bit (trừ khi đa lib bị vô hiệu hóa). Trong trường hợp đó, bạn cần thêm cả hai đường dẫn /usr/lib/x86_64-linux-gnu/usr/lib32.


Theo mặc định là có. Nhưng bạn có thể giới hạn bản dựng chỉ còn 64 bit với tùy chọn --with-multilib-list = m64 cho ./cool. Nó hoạt động với tôi khi tôi xây dựng GCC 4.8.5. Tôi cũng đã đề cập đến nó trong câu trả lời của tôi (phần 3) trên stackoverflow.com/a/55703805/4807875 .
Alexander Samoylov

0

Tôi cũng đang xây dựng một phiên bản gcc cũ hơn trên máy Ubuntu của mình (3.4.6 trên máy 4.6.3)
Tôi đã thử giải pháp @ mahmood's --disable-multilib, nhưng dường như gói tôi cần sử dụng gcc 3.4.6 cũng cần thư viện 32 bit.

Do đó, tôi đã thêm cả thư viện 64 bit và 32 bit vào LIBRARY_PATH

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib32:$LIBRARY_PATH 
export LIBRARY_PATH 

Ồ và tôi đang dùng Ubuntu 12.04 64 bit


1
Để làm việc với gcc / g ++ cũ hơn, bạn phải quên Ubuntu vì trên phiên bản Ubuntu mới hơn, bạn không thể khắc phục hoàn toàn sự cố và mặt khác Ubuntu cũ không còn được hỗ trợ. Bạn phải sử dụng hệ thống dựa trên Rehdat. Centos 6.3 vẫn ổn
mahmood
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.