configure: ข้อผิดพลาด: คอมไพเลอร์ C ไม่สามารถสร้างไฟล์เรียกทำงานได้


15

ผมพยายามที่จะติดตั้ง RVM \curl -L https://get.rvm.io | bash -s stable --ruby --autolibs=enable --auto-dotfilesใช้ มันทำงานได้ดีจนกระทั่งฉันได้รับข้อผิดพลาดในการกำหนดค่า:

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.

ต่อไปนี้เป็นเนื้อหาของไฟล์บันทึกที่กล่าวถึง:

[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

ฉันลองโปรแกรม C "hello world" และพบข้อผิดพลาดในการรวบรวม:

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

ฉันไม่แน่ใจว่าทำไมข้อผิดพลาดนี้ถูกส่งออกไป ฉันไม่พบคำตอบที่น่าพอใจในฟอรัม มีคนช่วยได้ไหม ขอบคุณ


1
ฉันพบข้อผิดพลาดนี้เมื่อฉันระบุ CXXFLAGS สำหรับ CPPFLAGS โดยไม่ตั้งใจเมื่อเรียกใช้สคริปต์ './configure' ดังนั้นข้อผิดพลาดไม่ได้อธิบายข้อผิดพลาดที่แน่นอน
RajaRaviVarma

คำตอบ:


12

ดูเหมือนว่าคุณมีตัวเชื่อมโยง GNU รุ่นที่ไม่ได้มาตรฐานldใน/usr/local/binไดเรกทอรีของคุณ (อาจติดตั้งจากแหล่งที่มา) และตัวแปรสภาพแวดล้อม PATH ของคุณถูกตั้งค่าให้ระบบค้นหารุ่นนั้นก่อนรุ่น 'system' (ซึ่งควรเป็น/usr/bin/ld) . หากคุณต้องการสร้างโดยใช้เครื่องมือสร้างรุ่นมาตรฐานคุณจะต้องปรับตัวแปรสภาพแวดล้อม PATH ของคุณเพื่อให้ค้นหาได้/usr/binล่วงหน้า/usr/local/bin

หากคุณต้องการแก้ไขตัวแปร PATH ของคุณอย่างถาวรคุณจะต้องค้นหาตำแหน่งที่คุณตั้งไว้ตั้งแต่แรก - อาจเป็นในไฟล์ ~ / .bashrc ของคุณ แต่อาจเป็นที่ตั้งอื่น ๆ อีกทางเลือกหนึ่งถ้าคุณต้องการการแก้ไขชั่วคราวสำหรับงานสร้างนี้คุณสามารถลอง

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

ในเทอร์มินัลก่อนดำเนินการ ./configure

อย่างไรก็ตามบางครั้งมีเหตุผลที่ดีว่าทำไมคุณ (หรือผู้ดูแลระบบของคุณ) อาจต้องการให้คุณใช้เครื่องมือรุ่นต่างๆ/usr/local- ถ้าเป็นเช่นนั้นคุณจะต้องค้นหาสาเหตุที่ทำให้ldเห็นได้ชัดว่าไม่เข้ากันได้กับโซ่ส่วนที่เหลือและแก้ไข ถ้าเป็นระบบที่ทำงานหรือโรงเรียนให้ติดต่อผู้ดูแลระบบหรือแผนกไอทีของคุณ


9
ปกติ/usr/local/binเป็นหน้าของ/usr/binในPATHสำหรับเหตุผลที่ดี: มีจุดใดในการมีโปรแกรมที่ติดตั้งภายในหากรุ่นจากการจัดจำหน่ายจะมีความสำคัญ งานที่ดีพบปัญหา แต่ความละเอียดที่แนะนำไม่ได้เปลี่ยน PATH แต่เป็นการลบหรือแก้ไขที่ใช้งานไม่/usr/local/bin/ldได้
Gilles 'หยุดชั่วร้าย'

@steeldriver: หากไม่มีใน ~ / .bashrc ฉันสามารถคัดลอก - วางบรรทัด "export PATH =" / usr / bin: $ PATH "" ได้ หรือมันจะสร้างปัญหาให้กับโปรแกรมอื่นหรือไม่?
นาคา

@Gilles ฉันได้แก้ไขคำตอบของฉันเพื่อสะท้อนความคิดเห็นของคุณ @naka ฉันแนะนำว่ามันจะทำให้เกิดความสับสนมากขึ้นในระยะยาว - คุณควรจดบันทึกความคิดเห็นของ Gilles และหาสาเหตุที่ผู้ดูแลระบบของคุณตั้งค่า PATH เพื่อใช้ เวอร์ชั่นใน/usr/local
steeldriver

3
ฉันได้รับข้อผิดพลาดเดียวกัน ... สิ่งนี้ไม่ได้ผลสำหรับฉัน ... which ldส่งคืนเท่านั้น/usr/bin/ld...
isomorphismes

9

ตรงกันข้ามกับเหตุผลที่ซับซ้อนที่ระบุไว้ข้างต้นในกรณีของฉันมันเป็นเพียงกรณีที่ไม่มีการg++ติดตั้ง ข้อผิดพลาดข้อความผิดพลาดเป็นเช่นเดียวกับที่อธิบายโดย OP คือ

configure: error: C compiler cannot create executables

ต่อไปฉันแก้ไขปัญหานี้ด้วยการติดตั้ง g ++:

sudo apt-get install g++

0

ลองอัปเดตระบบติดตั้งแพ็กเกจใหม่ที่มีldและ compiler ( gcc ) prelink -au && depmod -aวิ่ง จากนั้นรีบูท

คุณอาจต้องปิดการใช้งานหรือกำหนดค่า prelink ใหม่/etc/systemctlหรือที่ใดก็ตามที่ distros ของคุณตั้งค่านี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.