LIBTOOL在尝试编译GMP时失败

时间:2014-03-01 12:34:23

标签: bash gcc makefile gmp libtool

我正在尝试按照ubuntu 12.04 LTS下https://code.google.com/p/gmpy/wiki/InstallingGmpy2中的说明安装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:not found
  ../libtool:1:eval:base_compile + = -fomit-frame-pointer:not found
  ../libtool:1:eval:base_compile + = -mtune = core2:not found
  ../libtool:1:eval:base_compile + = -march = core2:not found
  ../libtool:1:eval:base_compile + = -c:未找到
  libtool:compile:必须指定编译命令
  libtool:compile:尝试'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]:*** [all-recursive]错误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吗?

3 个答案:

答案 0 :(得分:2)

正如您所说,这是因为对libtool的调用以[{1}}为前缀而您的/bin/sh实施(我的有根据的猜测:/bin/sh)未实现{ {1}}语法(不是POSIX功能)。 dash本身有+=作为hashbang。

如果您无法确定libtool前缀的来源,可以通过更改以下所有内容来“修复”/bin/bash本身:

SHELL

libtool

请注意,这是一个快速入侵,您应该修复使用base_compile+=" ${foo}" 调用base_compile="${base_compile} ${foo}" 的基础问题。

(我在尝试构建libtool时由于shellshock将默认shell从/bin/sh切换到bash后遇到了同样的问题。)

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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