首页 文章

LIBTOOL在尝试编译GMP时失败

提问于
浏览
2

我正在尝试按照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:not found ../libtool:1:eval:base_compile = gcc:not found ../libtool:1:eval:base_compile = -std = gnu99:not found ../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:not found ../libtool:1:eval:base_compile = -I ..:not found ../libtool:1:eval:base_compile = -DOPERATION_fib_table:not found ../libtool:1 :eval:base_compile = -m32:not found ../libtool:1:eval:base_compile = -O2:not found ../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吗?

2 回答

  • 0

    正如你所说,这是因为对 libtool 的调用以 /bin/sh 为前缀而你的 /bin/sh 实现(我的有根据的猜测: dash )没有实现 += 语法(这不是POSIX特性) . libtool 本身有 /bin/bash 作为hashbang .

    如果您无法确定 SHELL 前缀的来源,可以通过更改以下所有出现的内容来实现:"fix" libtool

    base_compile+=" ${foo}"
    

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

    请注意,这是一个快速入侵,您应该修复使用 /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 的位置 . 许多源包都是从内部二进制文件构建的,这些二进制文件可能与您的系统不兼容 .

相关问题