我正在尝试按照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 回答
正如你所说,这是因为对
libtool
的调用以/bin/sh
为前缀而你的/bin/sh
实现(我的有根据的猜测:dash
)没有实现+=
语法(这不是POSIX特性) .libtool
本身有/bin/bash
作为hashbang .如果您无法确定
SHELL
前缀的来源,可以通过更改以下所有出现的内容来实现:"fix"libtool
至
请注意,这是一个快速入侵,您应该修复使用
/bin/sh
调用libtool
的基础问题 .(在尝试构建
apr-util
时,由于shellshock将默认shell从bash
切换到dash
后,我遇到了同样的问题 . )apr
在/usr/share/apr-1/libtool
下调用内部libtool,这与您通常使用的不同 .可能是为了避免环境问题并且具有讽刺意味的是创建编译器问题:无论您的环境或调用方法如何,
mv arp-1/libtool
至apr-1/libtool.bak
和ln -sv /usr/bin/libtool
至/usr/share/apr-1/libtool
都将解决此问题 .同样,检查调用
libtool
的位置 . 许多源包都是从内部二进制文件构建的,这些二进制文件可能与您的系统不兼容 .