configure: error: Trình biên dịch C không thể tạo tệp thực thi


15

Tôi đã cố gắng để cài đặt rvm bằng cách sử dụng \curl -L https://get.rvm.io | bash -s stable --ruby --autolibs=enable --auto-dotfiles. Nó hoạt động tốt cho đến khi tôi gặp lỗi cấu hình:

Error running './configure --prefix=/home/nishant/.rvm/rubies/ruby-2.0.0-p247 --disable-install-doc --enable-shared',
please read /home/nishant/.rvm/log/1379591052_ruby-2.0.0-p247/configure.log
There has been an error while running configure. Halting the installation.

Sau đây là nội dung của tệp nhật ký được đề cập:

[2013-09-19 17:15:58] ./configure
current path: /home/nishant/.rvm/src/ruby-2.0.0-p247
command(4): ./configure --prefix=/home/nishant/.rvm/rubies/ruby-2.0.0-p247 --disable-install-doc --enable-shared
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/home/nishant/.rvm/src/ruby-2.0.0-p247':
configure: error: C compiler cannot create executables
See `config.log' for more details

Sau đó tôi đã thử một chương trình C "hello world" và gặp lỗi sau khi biên dịch:

nishant@nishant-Inspiron-1545:~$ gcc -g -o hello hello.c 
/usr/local/bin/ld: this linker was not configured to use sysroots
collect2: error: ld returned 1 exit status

Tôi không chắc tại sao lỗi này được ném. Tôi không thể tìm thấy một câu trả lời thỏa đáng cho điều này trên diễn đàn. Ai đó có thể vui lòng giúp đỡ. Cảm ơn


1
Tôi đã gặp lỗi này khi tôi chỉ định nhầm CXXFLAGS cho CPPFLAGS khi chạy tập lệnh './cool'. Vì vậy, thông báo lỗi không giải thích chính xác lỗi.
RajaRaviVarma

Câu trả lời:


12

Có vẻ như bạn có phiên bản trình liên kết GNU không chuẩn ldtrong /usr/local/binthư mục của bạn (có thể được cài đặt từ nguồn) và biến môi trường PATH của bạn được đặt sao cho hệ thống tìm thấy phiên bản đó trước phiên bản 'system' (nên có tại /usr/bin/ld) . Nếu bạn muốn xây dựng bằng các phiên bản hệ thống tiêu chuẩn của các công cụ xây dựng , bạn sẽ cần điều chỉnh biến môi trường PATH của mình để nó tìm kiếm /usr/bintrước/usr/local/bin

Nếu bạn muốn sửa vĩnh viễn biến PATH của mình, bạn sẽ cần tìm ra nơi bạn đặt ban đầu - có thể trong tệp ~ / .bashrc của bạn, nhưng các vị trí khác là có thể. Ngoài ra, nếu bạn chỉ cần một bản sửa lỗi tạm thời cho bản dựng này, bạn có thể thử

export PATH="/usr/bin:$PATH"

trong thiết bị đầu cuối trước khi thực hiện ./configure

Tuy nhiên, đôi khi có những lý do chính đáng tại sao bạn (hoặc quản trị viên hệ thống của bạn) có thể muốn bạn sử dụng các phiên bản công cụ từ /usr/local- nếu vậy, bạn sẽ cần tìm hiểu lý do tại sao lddường như không tương thích với phần còn lại của chuỗi xây dựng và sửa lỗi nó - nếu đây là hệ thống công việc hoặc trường học thì hãy liên hệ với quản trị viên hệ thống hoặc bộ phận CNTT của bạn.


9
Thông thường /usr/local/binlà trước /usr/bintại PATHvì lý do tốt: không có điểm trong có một chương trình được cài đặt tại địa phương nếu phiên bản từ phân phối được ưu tiên. Làm tốt công việc phát hiện ra vấn đề, nhưng giải pháp được đề xuất không phải là thay đổi PATH mà là loại bỏ hoặc sửa lỗi bị hỏng /usr/local/bin/ld.
Gilles 'SO- đừng trở nên xấu xa'

@steel ấn: Nếu nó không có trong ~ / .bashrc, tôi chỉ có thể sao chép-dán dòng "export PATH =" / usr / bin: $ PATH "" ở đó. Hoặc nó sẽ tạo ra một vấn đề cho các chương trình khác?
naka

@Gilles Tôi đã chỉnh sửa câu trả lời của mình để phản ánh nhận xét của bạn @naka Tôi khuyên bạn nên chống lại điều đó, về lâu dài - bạn nên lưu ý về nhận xét của Gilles và tìm hiểu lý do tại sao quản trị của bạn đã thiết lập PATH sử dụng phiên bản trong/usr/local
Steeldo

3
Tôi đã nhận lỗi cùng ... này không làm việc cho tôi ... which ldchỉ trở lại /usr/bin/ld....
đẳng cấu

9

Trái với những lý do phức tạp nêu trên, trong trường hợp của tôi, nó chỉ đơn giản là một trường hợp không g++được cài đặt. Điều kỳ lạ là thông báo lỗi giống như được mô tả bởi OP tức là

configure: error: C compiler cannot create executables

Dù sao, tôi đã giải quyết điều này bằng cách cài đặt g ++:

sudo apt-get install g++

0

Cố gắng cập nhật hệ thống, cài đặt lại các gói cung cấp ld và trình biên dịch ( gcc ). Chạy đi prelink -au && depmod -a. Sau đó khởi động lại.

Bạn có thể cần phải vô hiệu hóa hoặc cấu hình lại prelink trong /etc/systemctlhoặc bất cứ nơi nào bản phân phối của bạn thiết lập điều này.

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.