gcc 6.1. установка, gmp / mpfr / mpc не построен?

Я недавно установил gcc 6.1, специально для библиотек, упомянутых в заголовке (gmp / mpfr / mpc), я следил за тем, что сказано на веб-сайте GNU:

GNU Multiple Precision Library (GMP) версии 4.3.2 (или новее) Необходима для сборки GCC. Если исходный дистрибутив GMP находится в подкаталоге источников GCC с именем gmp, он будет собран вместе с GCC. В качестве альтернативы, если GMP уже установлен, но его нет в пути поиска вашей библиотеки, вам придется выполнить настройку с помощью параметра --with-gmp configure. См. Также --with-gmp-lib и --with-gmp-include. Древовидная сборка поддерживается только той версией GMP, которую устанавливает download_prerequisites.

Подобно другим библиотекам, а именно, я загрузил исходные коды последней версии, скопированной в моем каталоге GCC, прежде чем выполнять «configure», «make» и «make install» gcc, предполагая, что он был бы собран вместе с gcc. Однако, когда я пытаюсь запустить скомпилированный проект, который использует библиотеку gmp, он говорит:

error while loading shared libraries: libgmp.so.10: cannot open shared object file: No such file or directory

Итак, я искал, где находится общий объект, но не могу найти, где его установил GCC.

Должен ли я сначала скомпилировать GMP / MPFR и MPC перед установкой gcc? потому что я думал, что в этом нет необходимости. Если бы мне не нужно было компилировать библиотеки, где должны быть установлены GMP / MPFR и MPC?

Некоторые дополнительные детали:

Я не думаю, что сделал что-то странное и сложное. 1. Я загрузил gcc и поместил исходный код в каталог. 2. Я скачал все эти библиотеки в виде файлов tar; 3. создал три папки в корне исходных кодов gcc (gmp, mpfr и mpc). Amd расширил файлы предыдущего шага в таких папках. 4. Для gcc я выполнил ./configure --prefix=/path/to/gcc_build 5. Я выполнил make 6. затем make install

Если я не использую библиотеки, я могу компилировать и выполнять без проблем, когда мне нужны эти библиотеки, после успешной компиляции возвращается упомянутая мною ошибка. Если я посмотрю на пути lib/ и lib64/, нет ничего, что связано с библиотеками gmp.


person user8469759    schedule 06.07.2016    source источник
comment
Может точнее опишите, что вы делали? Обычно, когда gcc строит gmp / mpfr / mpc как часть своей сборки, он строит только статические версии. У вас где-то установлена ​​какая-то версия этих библиотек?   -  person Marc Glisse    schedule 06.07.2016
comment
@Marc Glisse Посмотрите обновление, и нет, у меня нет установленной библиотеки, я предполагал, что они были установлены во время установки gcc.   -  person user8469759    schedule 06.07.2016
comment
Объясните скомпилированный проект, как линковать библиотеку? Возможно, вы захотите проверить -rpath или попробовать добавить LD_LIBRARY_PATH env при выполнении проекта.   -  person Mine    schedule 06.07.2016
comment
Я не знаю, может это иметь значение или нет, но если я найду libgmp.so.10, он ничего не вернет. Кроме того, тот факт, что он должен быть построен вместе с gcc, не должен означать, что мне не нужно больше ничего делать?   -  person user8469759    schedule 06.07.2016
comment
Я действительно не понимаю, в make-файле, созданном с помощью make install, есть ссылка на материал gmp, но я могу понять, где во время выполнения make это будет установлено.   -  person user8469759    schedule 06.07.2016
comment
@MarcGlisse, из любопытства как узнать статичность билда?   -  person user8469759    schedule 07.07.2016
comment
А, подождите, значит, вы получаете сообщение об ошибке libgmp.so.10 при запуске своей программы, а не при запуске gcc? Тогда то, что вы сделали для сборки gcc, не имеет значения. Gcc действительно создает частную версию gmp / mpfr / mpc как часть своей сборки, но эта версия используется только частным образом во время сборки, она не устанавливается и не может использоваться другими программами. Что касается locate, я бы лучше проверил locate libgmp.so (возможно, после запуска updatedb). Что касается вашего последнего комментария, статическая сборка генерирует только libgmp.a, а не libgmp.so*.   -  person Marc Glisse    schedule 07.07.2016
comment
Извините, я не понимаю, что вы имеете в виду под частным использованием во время сборки?   -  person user8469759    schedule 07.07.2016


Ответы (1)


Поправьте меня если я ошибаюсь.

Я компилирую GCC 6.3.0 со своего исходного веб-сайта с помощью cygwin, после исследования, проведенного после этого сообщения Здесь сначала я компилирую инфраструктуры GCC, включая GMP, MPFR, MPC, а также libelf, ppl (необязательно). Затем попробуйте скомпилировать GCC с помощью этой команды (потому что я нацелен на GCC для linux, поэтому моя цель - i686-pc-linux-gnu). Я компилирую инфраструктуру GCC и добавляю префикс в

--prefix=/opt/cross

для GMP, MPFR, MPC также libelf и ppl.

Поэтому, когда я компилирую GCC, я могу использовать.

--with-gmp=/opt/cross --with-mpfr=/opt/cross --with-mpc=/opt/cross

и GCC будет автоматически отслеживать необходимую инфраструктуру в каталоге / opt / cross.

Потому что много раз я пытаюсь

./contrib/download_prerequisites

следуя этому методу, всегда получаю ошибку при попытке скомпилировать GCC.

Я выполнил этот метод, скомпилировав GCC и binutils для i686-pc-linux-gnu. Но я не пробовал использовать для компиляции ядра linux с помощью cygwin.

Извините за мой английский, и извините, если я отвечу OOT.

person ryuffhant    schedule 16.03.2017