【问题标题】:LIBTOOL fails while attempting to compile GMPLIBTOOL 在尝试编译 GMP 时失败
【发布时间】:2014-03-01 12:34:22
【问题描述】:

我正在尝试按照https://code.google.com/p/gmpy/wiki/InstallingGmpy2 中的说明在 ubuntu 12.04 LTS 下安装 gmp2。

因此我需要编译 GMP、MPFR 和 MPC。

要编译GMP,根据上面的说明,我需要:

$ cd ~/src/gmp-5.1.0
$ ./configure --prefix=/home/case/local
$ make
$ make check
$ make install

./configure 步骤运行良好,但我必须在命令前加上 /bin/bash >.

当我调用 make 命令时,我遇到了涉及 libtool 的错误:

/bin/sh ../libtool --tag=CC --mode=compile gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -D__GMP_WITHIN_GMP -I.. -DOPERATION_echo fib_table | sed 's/_$//' -m32 -O2 -pedantic -fomit-frame-pointer -mtune=core2 -march=core2 -c -o fib_table.lo fib_table.c
../libtool: 1581: ../libtool: preserve_args+= --tag CC: 未找到
../libtool: 1: eval: base_compile+= gcc: 未找到
../libtool: 1: eval: base_compile+= -std=gnu99: 未找到
../libtool: 1: eval: base_compile+= -DHAVE_CONFIG_H: 未找到
../libtool: 1: eval: base_compile+= -I.: 未找到
../libtool: 1: eval: base_compile+= -I..: 未找到
../libtool: 1: eval: base_compile+= -D__GMP_WITHIN_GMP: 未找到
../libtool: 1: eval: base_compile+= -I..: 未找到
../libtool: 1: eval: base_compile+= -DOPERATION_fib_table: 未找到
../libtool: 1: eval: base_compile+= -m32: 未找到
../libtool: 1: eval: base_compile+= -O2: 未找到
../libtool: 1: eval: base_compile+= -pedantic: 未找到
../libtool: 1: eval: base_compile+= -fomit-frame-pointer: 未找到
../libtool: 1: eval: base_compile+= -mtune=core2: 未找到
../libtool: 1: eval: base_compile+= -march=core2: 未找到
../libtool: 1: eval: base_compile+= -c: 未找到
libtool: compile: 必须指定编译命令
libtool:编译:尝试“libtool --help --mode=compile”以获取更多信息。 make[2]: *** [fib_table.lo] 错误 1
make[2]: 离开目录 '/home/nicolas/Dropbox/crypto/gcc-lib/gmp-5.1.3/mpn'
make[1]: *** [全递归] 错误 1
make[1]: 离开目录 '/home/nicolas/Dropbox/crypto/gcc-lib/gmp-5.1.3'
make: *** [all] 错误 2

我怀疑以 /bin/sh 为前缀的 libtool 调用是错误的,但我不知道如何更改它:

  • 在MakeFile中,我把SHELL=/bin/sh改成了SHELL=/bin/bash:没区别
  • 当我“printenv SHELL”时,我得到 /bin/bash

知道如何完成 GMP 的编译吗?

【问题讨论】:

  • 你试过了吗:sudo apt-get install libmpc-dev
  • 您为什么要安装 5.1.0 版而不是 5.1.3(当前最新)?

标签: bash gcc makefile gmp libtool


【解决方案1】:

正如您所说,发生这种情况是因为对 libtool 的调用以 /bin/sh 为前缀,而您的 /bin/sh 实现(我有根据的猜测:dash)没有实现 += 语法(这不是POSIX 功能)。 libtool 本身有 /bin/bash 作为 hashbang。

如果您无法弄清楚您的 SHELL 前缀来自哪里,您可以通过更改以下所有出现来“修复”libtool 本身:

base_compile+=" ${foo}"

base_compile="${base_compile} ${foo}"

请注意,这是一个快速的 hack,您应该修复使用 /bin/sh 调用 libtool 的潜在问题。

(在尝试构建apr-util时,由于shellshock,我在将默认shell从bash切换到dash后遇到了同样的问题。)

【讨论】:

  • 哇,这解决了我在编译不同的东西时遇到的很多错误。
【解决方案2】:

apr 调用/usr/share/apr-1/libtool 下的内部 libtool,这与您通常使用的不同。

可能是为了避免环境问题和讽刺性地创建编译器问题:mv arp-1/libtoolapr-1/libtool.bakln -sv /usr/bin/libtool/usr/share/apr-1/libtool 将解决此问题,无论您的环境或调用方法如何。

类似地,检查libtool 的调用位置。许多源代码包都是从可能与您的系统不兼容的内部二进制文件构建的。

【讨论】:

    【解决方案3】:

    正如错误日志所说:找不到 gcc 表明您没有安装 gcc(gnu c 编译器)。
    运行sudo apt-get install gcc && gcc --version

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 2019-09-11
      • 2013-10-09
      • 1970-01-01
      相关资源
      最近更新 更多