libtool не может найти la при линковке с опцией -L

Я столкнулся с проблемой при компиляции исходного кода mpc, который будет зависеть от gmp. Команда для компиляции 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.

Ошибка при компиляции mpc с помощью libtool, как показано ниже.

/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

Из сообщения об ошибке видно, что путь к библиотеке указан как -L/home/wy/tmp/gmp-6.2.0/ins/lib. Но libtool по-прежнему не может найти библиотеку.


person user3236879    schedule 20.06.2020    source источник


Ответы (2)


На этот вопрос будет сложно ответить, но похоже, что у вас есть какой-то другой .la файл, который ссылается на него и приводит к сбою таким образом. Пути в .la файлах всегда абсолютны. Подробности смотрите в этой моей старой записи в блоге. .

Мое лучшее предположение для вашего конкретного случая заключается в том, что у вас есть старая копия mpfr, установленная в /usr/local, и она имеет приоритет над той, которую вы хотите использовать.

person Diego Elio Pettenò    schedule 21.06.2020

Проблема, по-видимому, в сценариях конфигурации MPFR или make-файле, а не в MPC!

Как вы можете видеть выше, он ищет libgmp.la не в том месте, которое вы указали в командной строке, а в месте установки по умолчанию. Причина этого в том, что в libmpfr.la неверно указано расположение libgmp.la! МЧС не виноват...

Мне удалось обойти эту проблему, отредактировав файл libmpfr.la, который вы можете найти там, где вы указали библиотеки MPFR, и изменив местоположение на libgmp.la с /usr/lib/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 поместить свои файлы библиотеки.

person Rick Gutleber    schedule 12.08.2020