libtool 在使用选项 -L 链接时找不到 la

问题描述 投票:0回答:3

我在编译依赖gmp的mpc源代码时遇到了问题。 编译mpc的命令如下。

./configure --with-mpfr=/home/wy/tmp/mpfr-4.0.2/ins --with-gmp=/home/wy/tmp/gmp-6.2.0/ins --prefix=/home/wy/tmp/mpc-1.1.0/ins

gmp已成功安装到/home/user/tmp/gmp-6.2.0/ins。

使用libtool编译mpc时出现如下错误。

/bin/bash ../libtool  --tag=CC   --mode=link gcc -std=gnu99  -O2 -pedantic -fomit-frame-pointer -m64 -mtune=corei7 -march=corei7  -version-info 4:0:1 -L/home/wy/tmp/gmp-6.2.0/ins/lib -L/home/wy/tmp/mpfr-4.0.2/ins/lib  -o libmpc.la -rpath /home/wy/tmp/mpc-1.1.0/ins/lib abs.lo acos.lo acosh.lo add.lo add_fr.lo add_si.lo add_ui.lo arg.lo asin.lo asinh.lo atan.lo atanh.lo clear.lo cmp.lo cmp_abs.lo cmp_si_si.lo conj.lo cos.lo cosh.lo div_2si.lo div_2ui.lo div.lo div_fr.lo div_ui.lo exp.lo fma.lo fr_div.lo fr_sub.lo get_prec2.lo get_prec.lo get_version.lo get_x.lo imag.lo init2.lo init3.lo inp_str.lo log.lo log10.lo mem.lo mul_2si.lo mul_2ui.lo mul.lo mul_fr.lo mul_i.lo mul_si.lo mul_ui.lo neg.lo norm.lo out_str.lo pow.lo pow_fr.lo pow_ld.lo pow_d.lo pow_si.lo pow_ui.lo pow_z.lo proj.lo real.lo rootofunity.lo urandom.lo set.lo set_prec.lo set_str.lo set_x.lo set_x_x.lo sin.lo sin_cos.lo sinh.lo sqr.lo sqrt.lo strtoc.lo sub.lo sub_fr.lo sub_ui.lo swap.lo tan.lo tanh.lo uceil_log2.lo ui_div.lo ui_ui_sub.lo  -lmpfr -lmpfr -lgmp -lm 
/bin/grep: /usr/local/lib/libgmp.la: No such file or directory
/bin/sed: can't read /usr/local/lib/libgmp.la: No such file or directory
libtool:   error: '/usr/local/lib/libgmp.la' is not a valid libtool archive
Makefile:432: recipe for target 'libmpc.la' failed
make[2]: *** [libmpc.la] Error 1
make[2]: Leaving directory '/home/wy/tmp/mpc-1.1.0/src'
Makefile:465: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/wy/tmp/mpc-1.1.0'
Makefile:375: recipe for target 'all' failed
make: *** [all] Error 2

从错误信息中我们可以看到lib路径已被指示为-L/home/wy/tmp/gmp-6.2.0/ins/lib。但libtool仍然找不到lib。

libtool mpc
3个回答
1
投票

问题似乎出在 MPFR 配置脚本或 makefile 中,而不是在 MPC 中!

正如您在上面看到的,它不是在您在命令行指定的位置查找 libgmp.la,而是在默认安装位置查找。出现这种情况的原因是libmpfr.la中指定的libgmp.la位置不正确!这不是 MPC 的错...

我可以通过编辑 libmpfr.la 来解决这个问题,您可以找到指定 MPFR 库的位置,并将位置从 /usr/lib/libgmp.la 更改为 libgmp.la 的实际位置您的目标是 GMP 库。

libgmp.la 中的行应如下所示:

# Libraries that this one depends upon.
dependency_libs=' -L/your/mpfr/lib/target /your/gmp/lib/target/libgmp.la

其中“/your/mpfr/lib/target”应该是您告诉MPFR放置其库文件的位置,“/your/gmp/lib/target”需要更改为您告诉GMP放置其库文件的位置。


0
投票

这很难轻易回答,但似乎您有一些 other

.la
文件引用了它,并导致它以这种方式失败。
.la
文件中的路径始终是绝对的。有关详细信息,请参阅我的这篇旧博客文章

对于您的特定情况,我的最佳猜测是您在 /usr/local 中安装了 mpfr 的旧副本 - 并且该副本优先于您要使用的副本。


0
投票

除了Rick Gutleber的回答之外,我发现误导MPFR获得错误的依赖路径是GMP的错。

在生成的文件“libgmp.la”中,有一行:

libdir='/usr/local/lib'

MPFR 将此变量复制到库依赖项的前缀。所以先修复 GMP,然后编译 MPFR,然后再编译 MPC。

GMP的

configure
文件似乎有一些bug,除非你指定
EPREFIX
,否则
PREFIX
不会被设置为
--exec-prefix=$PREFIX

如果您不想直接编辑

libgmp.la
,请使用
./configure
重新
--exec-prefix
,然后再次使用
make clean
make

© www.soinside.com 2019 - 2024. All rights reserved.