【问题标题】:Can't compile C code on linux无法在 linux 上编译 C 代码
【发布时间】:2014-01-30 01:03:16
【问题描述】:

我正在尝试在 Linux 13.10“云”/虚拟服务器上安装 rJave/JRI(允许您从 Java 应用程序中运行 R 命令的代码)。

如果我在 R 中尝试 install.packages("rJava"),我会得到 "

* installing *source* package ‘rJava’ ...
** package ‘rJava’ successfully unpacked and MD5 sums checked
checking for gcc... gcc -std=gnu99
checking whether the C compiler works... no
configure: error: in `/tmp/RtmpW6xdRi/R.INSTALLbff775d77a6/rJava':
configure: error: C compiler cannot create executables
See `config.log' for more details

不幸的是,我不知道 config.log 在哪里,find / -name "config.log" 没有找到任何东西。于是我下载了源码并尝试安装:

checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for gcc... gcc -std=gnu99
checking for C compiler default output file name... 
configure: error: C compiler cannot create executables
See `config.log' for more details.

现在,至少,我有一个配置日志。任何关于为什么失败的解释将不胜感激:

This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by JRI configure 0.3, which was
generated by GNU Autoconf 2.61.  Invocation command line was

  $ ./configure 

## --------- ##
## Platform. ##
## --------- ##

hostname = greg1304
uname -m = x86_64
uname -r = 3.8.0-33-generic
uname -s = Linux
uname -v = #48-Ubuntu SMP Wed Oct 23 09:16:58 UTC 2013

/usr/bin/uname -p = unknown
/bin/uname -X     = unknown

/bin/arch              = unknown
/usr/bin/arch -k       = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo      = unknown
/bin/machine           = unknown
/usr/bin/oslevel       = unknown
/bin/universe          = unknown

PATH: /usr/local/sbin
PATH: /usr/local/bin
PATH: /usr/sbin
PATH: /usr/bin
PATH: /sbin
PATH: /bin
PATH: /usr/games
PATH: /home/gregd/bin


## ----------- ##
## Core tests. ##
## ----------- ##

configure:1722: checking build system type
configure:1740: result: x86_64-unknown-linux-gnu
configure:1762: checking host system type
configure:1777: result: x86_64-unknown-linux-gnu
configure:1910: checking for gcc
configure:1937: result: gcc -std=gnu99
configure:2175: checking for C compiler version
configure:2182: gcc -std=gnu99 --version >&5
gcc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

configure:2185: $? = 0
configure:2192: gcc -std=gnu99 -v >&5
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.7/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.7.2-2ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-l
anguages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr
/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --ena
ble-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with
-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) 
configure:2195: $? = 0
configure:2202: gcc -std=gnu99 -V >&5
gcc: error: unrecognized command line option '-V'
gcc: fatal error: no input files
compilation terminated.
configure:2205: $? = 4
configure:2228: checking for C compiler default output file name
configure:2255: gcc -std=gnu99 -O2 -pipe -g   conftest.c  >&5
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: cannot find -lc
/usr/bin/ld: cannot find crtn.o: No such file or directory
collect2: error: ld returned 1 exit status
configure:2258: $? = 1
configure:2296: result: 
configure: failed program was:
| /* confdefs.h.  */
| #define PACKAGE_NAME "JRI"
| #define PACKAGE_TARNAME "jri"
| #define PACKAGE_VERSION "0.3"
| #define PACKAGE_STRING "JRI 0.3"
| #define PACKAGE_BUGREPORT "simon.urbanek@r-project.org"
| /* end confdefs.h.  */
| 
| int
| main ()
| {
| 
|   ;
|   return 0;
| }
configure:2303: error: C compiler cannot create executables
See `config.log' for more details.

## ---------------- ##
## Cache variables. ##
## ---------------- ##

ac_cv_build=x86_64-unknown-linux-gnu
ac_cv_env_CC_set=
ac_cv_env_CC_value=
ac_cv_env_CFLAGS_set=
ac_cv_env_CFLAGS_value=
ac_cv_env_CPPFLAGS_set=
ac_cv_env_CPPFLAGS_value=
ac_cv_env_CPP_set=
ac_cv_env_CPP_value=
ac_cv_env_LDFLAGS_set=
ac_cv_env_LDFLAGS_value=
ac_cv_env_LIBS_set=
ac_cv_env_LIBS_value=
ac_cv_env_build_alias_set=
ac_cv_env_build_alias_value=
ac_cv_env_host_alias_set=
ac_cv_env_host_alias_value=
ac_cv_env_target_alias_set=
ac_cv_env_target_alias_value=
ac_cv_host=x86_64-unknown-linux-gnu
ac_cv_prog_ac_ct_CC='gcc -std=gnu99'

## ----------------- ##
## Output variables. ##
## ----------------- ##

CC='gcc -std=gnu99'
CFLAGS='-O2 -pipe -g'
CPICF=''
CPP='gcc -std=gnu99 -E'
CPPFLAGS=''
DEFFLAGS=''
DEFS=''
ECHO_C=''
ECHO_N='-n'
ECHO_T=''
EGREP=''
EXEEXT=''
GREP=''
JAR=''
JAVAC=''
JAVAH=''
JAVA_CFLAGS=''
JAVA_HOME='/usr/lib/jvm/java-6-openjdk'
JAVA_INC=''
JAVA_LD_PATH=''
JAVA_LIBS=''
JAVA_PROG=''
JNILD=''
JNIPREFIX=''
JNISO=''
LDFLAGS=''
LIBOBJS=''
LIBS=''
LTLIBOBJS=''
OBJEXT=''
PACKAGE_BUGREPORT='simon.urbanek@r-project.org'
PACKAGE_NAME='JRI'
PACKAGE_STRING='JRI 0.3'
PACKAGE_TARNAME='jri'
PACKAGE_VERSION='0.3'
PATH_SEPARATOR=':'
RINC='-I/usr/share/R/include'
RLD='-L/usr/lib/R/lib -lR'
R_DOC_DIR='/usr/share/R/doc'
R_HOME='/usr/lib/R'
R_INCLUDE_DIR='/usr/share/R/include'
R_SHARE_DIR='/usr/share/R/share'
SHELL='/bin/bash'
ac_ct_CC='gcc -std=gnu99'
bindir='${exec_prefix}/bin'
build='x86_64-unknown-linux-gnu'
build_alias=''
build_cpu='x86_64'
build_os='linux-gnu'
build_vendor='unknown'
datadir='${datarootdir}'
datarootdir='${prefix}/share'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
dvidir='${docdir}'
exec_prefix='NONE'
host='x86_64-unknown-linux-gnu'
host_alias=''
host_cpu='x86_64'
host_os='linux-gnu'
host_vendor='unknown'
htmldir='${docdir}'
includedir='${prefix}/include'
infodir='${datarootdir}/info'
libdir='${exec_prefix}/lib'
libexecdir='${exec_prefix}/libexec'
localedir='${datarootdir}/locale'
localstatedir='${prefix}/var'
mandir='${datarootdir}/man'
oldincludedir='/usr/include'
pdfdir='${docdir}'
prefix='NONE'
program_transform_name='s,x,x,'
psdir='${docdir}'
sbindir='${exec_prefix}/sbin'
sharedstatedir='${prefix}/com'
sysconfdir='${prefix}/etc'
target_alias=''

## ----------- ##
## confdefs.h. ##
## ----------- ##

#define PACKAGE_NAME "JRI"
#define PACKAGE_TARNAME "jri"
#define PACKAGE_VERSION "0.3"
#define PACKAGE_STRING "JRI 0.3"
#define PACKAGE_BUGREPORT "simon.urbanek@r-project.org"

configure: exit 77

【问题讨论】:

  • 构建尝试-V 标志的事实很有趣,对我来说也不存在。他们的构建设置很可能实际上已损坏,或者(希望)您尝试使用错误的环境设置来执行此操作...
  • @Veltas 只是查看配置脚本,如果我正确理解代码,这个问题是相当无害的。
  • @GregDougherty 看看stackoverflow.com/questions/6329887/… - 我认为缺少 crt1.o 和 co 文件是核心问题,您可以尝试一些可能的解决方案和解决方法。但是,GitHub 上的 rJava 版本与您的明显不同,您确定您有一个相当新的版本吗?
  • @fvu:$ sudo apt-get install libc0.1-dev 包 libc0.1-dev 不可用,但被另一个包引用。但是,以下软件包替换了它: libc-dev-bin:i386 libc-dev-bin E: Package 'libc0.1-dev' has no installation Candidate $ sudo apt-get install libc-dev-bin libc-dev-bin is已经是最新版本了。 0 个已升级,0 个新安装,0 个要移除,0 个未升级。
  • @fvu:感谢您指向 GitHub。我从 rforge 得到了我的,它们有很多版本落后于 rforge.net/JRI/svn.html

标签: c linux r gcc installation


【解决方案1】:

我不确定您的 C 问题,但我认为如果它使用这些标志测试您的 C++ 编译器,您将不会有任何收获 - 我认为 -std=gnu99 对 c++ 无效(尽管它适用于c,因此我假设您已经有其他问题)

编辑: 也不确定这是否是版本控制(我的 gcc 是 4.8.1),虽然我对此表示怀疑,但据我所知,您有 64 位目标但没有 gcc 的 64 位库?我的 gcc-std=gnu99 -v 输出包括靠近底部的几个标志,你有一些但不是全部:

--with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu

如果程序正在检查 64 位编译的可执行文件(假设您的系统是 x64_86?),也许您的问题就在这里。

【讨论】:

  • 你是想说 Greg 是在错误的架构上编译的吗?
  • @Veltas 我的建议是,如果 rJava 代码采用 64 位架构,它可能会尝试 64 位编译器,但我看不到任何标志表明他的 gcc 包含 64 位库。所以我想,是的,虽然不是针对他目前正在编译的程序。
  • 查看 Launchpad 上的更改日志:[launchpad.net/… 列出了一些有关标头的问题,但我认为这些是在成为软件中心的一部分之前解决问题的补丁? @Greg,如果您不需要特定版本的 gcc,您可以尝试获取其他版本吗?由于看起来是您安装了二进制文件而不是自己编译,所以应该不会超过几分钟,对吧?
  • 这是我刚刚运行 gcc gcc-std=gnu99 -v gcc: error: gcc-std=gnu99: No such file or directory 使用内置规范时得到的结果。目标:x86_64-linux-gnu 配置:... --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --libexecdir= /usr/lib --libdir=/usr/lib --with-sysroot=/ --enable-clocale=gnu --enable-plugin --enable-objc-gc --disable-werror --with-arch-32 =i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu 线程模型:posix gcc 4.7版.2 (Ubuntu/Linaro 4.7.2-2ubuntu1)
【解决方案2】:

所以我将 13.04 升级到 13.10,这显然将我的 gcc 从 4.7 升级到了 4.8。所以我又试了一次,这次一切正常。

所以我将把它称为 gcc 4.7 错误。

感谢您的所有帮助。

【讨论】:

    【解决方案3】:

    供参考:在 Ubuntu 16.04 上,您必须安装“libc6-dev”

    【讨论】:

      猜你喜欢
      • 2013-09-25
      • 1970-01-01
      • 2017-08-25
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 2012-04-09
      相关资源
      最近更新 更多