Вопрос или проблема
Я пытаюсь скомпилировать последнюю версию GCC, чтобы попробовать скомпилировать Modula 3 CM3, но сначала мне нужно установить версии GMP, MPFR и MPC. GMP устанавливается корректно с помощью ./configure --build-x86_64-oracle-solaris10 --enable-cxx
, затем make
, make check
и make install
. Но когда я запускаю ./configure
из MPFR, он выдает ошибку checking if we can link with GMP... no
и показывает ошибку configure: error: libgmp not found or uses a different ABI (including static vs shared)
. Но когда я запускаю ./configure --with-gmp-build=/usr/gmp-6.3.0
(каталог, где я собрал gmp), он сначала проходит этап линковки с GMP, а затем выдает checking if gmp.h and libgmp version are the same... (6.3.0/6.1.2) no
и предупреждение о том, что версии, похоже, разные, но все равно завершается конфигурация. Однако он не проходит make check
после успешного выполнения make
. Я не знаю, что делать, я не могу получить ни более новую версию gcc, чем gcc5g++ от opencsw, которую не нужно собирать самому. У меня также есть аналогичная проблема при попытке ./configure
MPC. Я могу предоставить полные выводы терминала, когда прохожу процесс установки GMP и обеих версий MPFR, если это необходимо. Я также использую только пользователя root. Вот мой env.
Ответ или решение
Ваша проблема с компиляцией библиотек GMP и MPFR на системе Solaris 10 x86_64 поднимает важные вопросы совместимости версий и конфигурации окружения. Давайте разберем все детали по порядку и предложим пути решения.
Проблема совместимости версий
Вы упоминаете, что при компиляции MPFR вы получаете ошибку о несовпадении версий GMP: checking if gmp.h and libgmp version are the same... (6.3.0/6.1.2) no
. Это указывает на то, что библиотека GMP, установленная на вашей системе, версии 6.3.0, в то время как заголовочный файл (gmp.h
) ссылается на версию 6.1.2. Разные версии могут приводить к несовместимости, так как API и ABI могли измениться между ними.
Причины проблемы
-
Несоответствующая установка GMP: Возможно, у вас установлены две разные версии GMP. Проверьте, возможно, у вас в системе имеется старая версия GMP, оставшаяся после предыдущих установок.
-
Кэширование: Если вы компилировали GMP несколько раз, система могла кэшировать старые версии заголовочных файлов. Убедитесь, что после установки GMP вы очищаете кэш компиляции и не используете старые файлы.
-
Переменные окружения: Убедитесь, что переменные, такие как
LD_LIBRARY_PATH
, не содержат путей к старым версиям библиотек. Если они есть, это может привести к загрузке неправильной версии GMP.
Шаги по решению проблемы
-
Поиск и очистка старых установок:
locate gmp.h locate libgmp.so
Найдите и удалите старые версии, если они существуют. Убедитесь, что используете только одну версию GMP на всем пути компиляции.
-
Перекомпиляция GMP:
Если вы нашли старые версии или подозреваете, что установленные библиотеки могут мешать, то выполните полную переустановку GMP:cd /path/to/gmp-6.3.0 make clean ./configure --build=x86_64-oracle-solaris10 --enable-cxx make make install
-
Обновление конфигурации MPFR:
После успешной установки GMP перейдите к MPFR и укажите путь к сборке GMP, если это необходимо. Попробуйте выполнить конфигурацию следующим образом:cd /path/to/mpfr ./configure --with-gmp=/usr --with-gmp-build=/usr/gmp-6.3.0 make make check
-
Проверка библиотек:
Используйте утилитуldd
, чтобы убедиться, что ваши библиотеки ссылаются на правильные версии:ldd /path/to/your/compiled/program
-
Проблемы с MPC:
Если у вас будут аналогичные проблемы с MPC, убедитесь, что он компилируется после успешной установки MPFR, указывая правильные пути к GMP и MPFR.
Заключение
Проблемы с проектами, связанными с компиляцией библиотек (особенно для GCC и его зависимостей), часто связаны с несовпадением версий библиотек и нехваткой ясности в их установке. Правильная последовательность компиляции и проверка на наличие конфликтующих версий в вашей системе помогут устранить большинство проблем. Способность управлять библиотеками на уровне, близком к вашему приложению, требует внимательности и тщательной проверки, поэтому следуйте приведённым шагам, чтобы решить свою проблему.
Если у вас возникнут дополнительные вопросы или понадобится помощь, пожалуйста, не стесняйтесь обращаться!