configure: hata: C derleyicisi yürütülebilir dosyalar oluşturamıyor


15

Kullanarak rvm yüklemeye çalışıyordum \curl -L https://get.rvm.io | bash -s stable --ruby --autolibs=enable --auto-dotfiles. Bir yapılandırma hatası alana kadar iyi çalıştı:

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.

Söz konusu günlük dosyasının içeriği aşağıdadır:

[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

Sonra bir "merhaba dünya" C programı denedim ve derleme aşağıdaki hatayı aldım:

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

Bu hatanın neden atıldığından emin değilim. Forumda buna tatmin edici bir cevap bulamadım. Birisi lütfen yardım edebilir mi? Teşekkürler


1
'./Configure' komut dosyasını çalıştırırken yanlışlıkla CPPFLAGS için CXXFLAGS belirlediğimde bu hatayı aldım. Bu nedenle hata mesajı kesin hatayı açıklamaz.
RajaRaviVarma

Yanıtlar:


12

Eğer GNU bağlayıcı olmayan bir standart sürüme sahip gibi görünüyor ldsenin içinde /usr/local/bin(muhtemelen kaynağından yüklenir) dizine ve PATH ortam değişkeni böyle ayarlandığını sistem bulur o 'sistem' versiyonundan önce versiyonu (en olması gereken /usr/bin/ld) . Derleme araçlarının standart sistem sürümlerini kullanarak derleme yapmak istiyorsanız, PATH ortam değişkeninizi /usr/binönceden arama yapacak şekilde ayarlamanız gerekir ./usr/local/bin

PATH değişkeninizi kalıcı olarak düzeltmek istiyorsanız, orijinal olarak nereye ayarladığınızı bulmanız gerekir - muhtemelen ~ / .bashrc dosyanızda, ancak diğer konumlar da mümkündür. Alternatif olarak, bu derleme için yalnızca geçici bir düzeltmeye ihtiyacınız varsa,

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

çalıştırmadan önce terminalde ./configure

Bununla birlikte, bazen sizin (veya sistem yöneticinizin) araçların sürümlerini kullanmanızı istemenizin iyi nedenleri olabilir /usr/local- öyleyse, neden ldyapı zincirinin geri kalanıyla uyumlu olmadığını ve düzeltmenin neden olduğunu bulmanız gerekecektir. bu bir iş veya okul sistemi ise sistem yöneticinize veya BT departmanınıza başvurun.


9
Normalde /usr/local/binilerisinde olduğu /usr/biniçinde PATHiyi bir nedenle: Bir program dağılımından sürüm önceliklidir eğer yerel olarak yüklü sahip olmanın hiçbir anlamı yoktur. Sorunu tespit etmek iyi iş, ancak önerilen çözüm PATH'yi değiştirmek değil, kırık olanı kaldırmak veya düzeltmektir /usr/local/bin/ld.
Gilles 'SO- kötü olmayı bırak'

@steeldriver: Eğer ~ / .bashrc içinde yoksa "export PATH =" / usr / bin: $ PATH "" satırını kopyalayıp yapıştırabilir miyim. Yoksa diğer programlar için sorun yaratır mı?
naka

@Gilles Yorumunuzu yansıtmak için cevabımı düzenledim @naka Buna karşı öneriyorum, uzun vadede daha fazla karışıklığa neden olacak - Gilles'in yorumunu not etmeli ve yöneticinizin neden kullanmak için PATH'yi ayarladığını öğrenmelisiniz sürüm/usr/local
steeldriver

3
Aynı hatayı aldım… bu benim için işe yaramadı… which ldsadece geri dönüyor /usr/bin/ld….
izomorphismes

9

Yukarıda verilen karmaşık nedenlerin aksine, benim durumumda, bu sadece g++kurulmamış bir durumdu. Garip bir şekilde, hata mesajı OP yani

configure: error: C compiler cannot create executables

Neyse, bunu g ++ yükleyerek çözdüm:

sudo apt-get install g++

0

Sistemi güncellemeye çalışın, ld ve derleyici ( gcc ) sağlayan paketleri yeniden yükleyin . Koş prelink -au && depmod -a. Sonra yeniden başlatın.

Dağıtımlarınızın bunu ayarladığı /etc/systemctlher yerde veya her yerde ön bağlantıyı devre dışı bırakmanız veya yeniden yapılandırmanız gerekebilir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.