编译器未找到,但是已经安装了GCC。

4

我在一台专用服务器上进行了Slackware64 14.0的全新安装,我很难编译nginx。

./configure (my options)

返回
checking for OS
 + Linux 3.10.23-xxxx-std-ipv6-64 x86_64
checking for C compiler ... not found

./configure: error: C compiler cc is not found

但是gcc已经安装了,这是因为运行gcc -v命令返回的结果。

Reading specs from /usr/lib64/gcc/x86_64-slackware-linux/4.7.1/specs
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-slackware-linux/4.7.1/lto-wrapper
Target: x86_64-slackware-linux
Configured with: ../gcc-4.7.1/configure --prefix=/usr --libdir=/usr/lib64 --mandir=/usr/man --infodir=/usr/info --enable-shared --enable-bootstrap --enable-languages=ada,c,c++,fortran,go,java,lto,objc --enable-threads=posix --enable-checking=release --enable-objc-gc --with-system-zlib --with-python-dir=/lib64/python2.7/site-packages --disable-libunwind-exceptions --enable-__cxa_atexit --enable-libssp --enable-lto --with-gnu-ld --verbose --enable-java-home --with-java-home=/usr/lib64/jvm/jre --with-jvm-root-dir=/usr/lib64/jvm --with-jvm-jar-dir=/usr/lib64/jvm/jvm-exports --with-arch-directory=amd64 --with-antlr-jar=/home/slackware/slackbuilds/gcc/antlr-runtime-3.4.jar --enable-multilib --target=x86_64-slackware-linux --build=x86_64-slackware-linux --host=x86_64-slackware-linux
Thread model: posix
gcc version 4.7.1 (GCC) 

我尝试了什么(在谷歌上搜索后)

"/tmp 挂载了 noexec"
的确是这样,因为我进行了硬化配置。我更改了它并重新启动以确保,现在我的 /etc/fstab 看起来像这样:

# <file system> <mount point>   <type>  <options>   <dump>  <pass>
/dev/md1    /   ext4    errors=remount-ro,discard   0   1
/dev/md2    /home   ext4    defaults,discard    1   2
/dev/md5    /var/www    ext4    defaults,discard    1   2
/dev/md6    /var/log    ext4    defaults,discard    1   2
/dev/md7    /tmp    ext4    defaults,discard,nodev,nosuid   1   2
/dev/md8    /var/lib/mysql  ext4    defaults,discard    1   2
/dev/sda3   swap    swap    defaults    0   0
/dev/sdb3   swap    swap    defaults    0   0
proc            /proc   proc    defaults        0       0
sysfs           /sys    sysfs   defaults        0       0
/tmp            /var/tmp none   rw,nosuid,nodev,bind    0   0

新的fstab没有noexec选项会失效。(我甚至尝试了显式的exec选项)

"gcc在你的$PATH中不存在"
实际上是存在的。

whereis gcc
gcc: /usr/bin/gcc /usr/lib64/gcc /usr/X11R6/bin/gcc /usr/bin/X11/gcc /usr/X11/bin/gcc /usr/libexec/gcc /usr/man/man1/gcc.1.gz /usr/share/man/man1/gcc.1.gz /usr/X11/man/man1/gcc.1.gz

echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/bin:/usr/bin

我做的其他事情:

查看nginx配置文件时,他们使用了一个CC变量,但是这个CC变量并不存在。

CC=/usr/bin/gcc

这也没起作用。

我尝试从源代码编译另一个程序,以确保这不是nginx的问题,然后发现了一些有趣的东西:

当我试图编译htop时,我得到了以下信息:

./configure 

checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/home/napster/htop-master':
configure: error: C compiler cannot create executables
See `config.log' for more details

这是可以预料的,因为尽管我只安装了最基本的开发工具,gcc仍然被找到了。需要安装所需的工具来解决此错误。

我甚至检查了/usr/bin中的符号链接,以确保gcc和cc正常:

ls -l /usr/bin

cc -> gcc
gcc -> gcc-4.7.1

有什么想法吗?
提前感谢。


请检查您是否已安装build-essential软件包,如https://dev59.com/PGEh5IYBdhLWcg3wVCAb所述。 - jocassid
4个回答

0

'config.log'文件的内容是什么?

很可能你在某个地方拾取了一些错误的CFLAGS或LDFLAGS——可能是在配置脚本中或者来自nginx/htop默认值。

CFLAGS和LDFLAGS是传递给编译器命令行的选项。如果它们无效,那么编译器就无法运行。

如果你缺少nginx/htop需要的基本库,并且指定该库的LDFLAG导致gcc退出,则可能会出现相同的症状。

你真的需要检查config.log文件。


尽管错误不同,但原因相同。解决在config.log中指出的错误也解决了nginx的错误。谢谢。 - Renato Massaro
如果有其他人想知道的话,htop的config.log告诉我缺少libmpc库。 - voneiden

0
当我遇到这个问题时,问题是我将构建目录指定为--builddir=~/git/nginx/build
在看到错误后,我查看了文件~/git/nginx/build/autoconf.err并看到以下信息:
cc1: fatal error: /home/aaron/git/nginx/build/autotest.c: No such file or directory
compilation terminated.

这似乎很奇怪。然后我注意到一个名为~的流氓目录出现了! 快速运行rm -fr \~/将其清除,然后我再次运行auto/configure,但使用绝对路径来指定--builddir,这样就可以正常工作了。

0

-3

我认为可能是权限问题。使用sudo ./configure命令应该就可以了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接