配置:错误: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

然后,我尝试了一个“ hello world” C程序,并在编译时出现以下错误:

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
当我在运行'./configure'脚本时错误地将CXXFLAGS指定为CPPFLAGS时,出现此错误。因此,错误消息无法解释确切的错误。
RajaRaviVarma

Answers:


12

ld您的 /usr/local/bin目录中似乎有非标准版本的GNU链接器(可能是从源安装的),并且设置了PATH环境变量,以便系统在“系统”版本(应位于/usr/bin/ld)之前找到该版本。。如果要使用构建工具的标准系统版本进行构建,则需要调整PATH环境变量,以便它可以/usr/bin提前搜索/usr/local/bin

如果要永久修复PATH变量,则需要找出最初设置它的位置-可能在〜/ .bashrc文件中,但其他位置也是可能的。另外,如果您只需要此版本的临时修复程序,则可以尝试

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

在终端中执行 ./configure

但是,有时有很好的理由使您(或系统管理员)希望您使用以下版本的工具/usr/local-如果是,那么您将需要找出为什么该版本ld显然与其余构建链不兼容并进行修复的原因。它-如果是工作系统或学校系统,请与系统管理员或IT部门联系。


9
通常/usr/local/bin是提前/usr/binPATH有很好的理由:有在具有程序本地安装,如果从发行版本为准没有意义的。很好地发现问题,但是建议的解决方案不是更改PATH而是删除或修复损坏的/usr/local/bin/ld
吉尔(Gilles)“所以

@steeldriver:如果〜/ .bashrc中不存在该文件,我可以复制并粘贴“ export PATH =“ / usr / bin:$ PATH””行。还是会对其他程序造成问题?
naka 2013年

@吉尔斯(Gilles)我已经修改了答案,以反映您的评论(@naka),我建议不要这样做,从长远来看,这会引起更多的混乱-您应该注意吉尔斯(Gilles)的评论,并找出为什么管理员设置PATH来使用版本/usr/local
steeldriver

3
我遇到了同样的错误……这对我不起作用…… which ld仅返回/usr/bin/ld……。
同构2014年

9

与上面给出的复杂原因相反,就我而言,这只是没有g++安装的情况。奇怪的是,错误消息与OP描述的相同,即

configure: error: C compiler cannot create executables

无论如何,我通过安装g ++解决了这个问题:

sudo apt-get install g++

0

尝试更新系统,重新安装提供ld和编译器(gcc)的软件包。运行prelink -au && depmod -a。然后重新启动。

您可能需要在/etc/systemctl发行版进行设置的任何地方禁用或重新配置预链接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.