Есть два разных способа предоставить G CC необходимые внешние хост-библиотеки, такие как GMP и MPFR :
До настройки, запустите ./contrib/download_prerequisites
из исходного каталога G CC верхнего уровня. Он загрузит исходные коды из соответствующих репозиториев проекта. Это все, что вам нужно сделать; G CC настроит и построит эти библиотеки перед запуском configure для себя или своих целевых библиотек.
configure с --with-gmp
et c. чтобы указать место, где была установлена соответствующая библиотека хоста.
У любого подхода есть свои плюсы и минусы:
Первый подход требует подключения inte rnet и время сборки go вверх. Однако увеличение времени сборки незначительно по сравнению со временем сборки, необходимым для остальной части компилятора и его целевых библиотек.
С другой стороны, вы получите правильную версию и параметры сборки любой хост-библиотеки по своему усмотрению. by G CC, независимо от того, какая версия библиотеки уже была установлена на хосте. И эта конфигурация намного удобнее и автономнее, когда вы кросс-компилируете G CC (потому что это примерно хост библиотеки, и, следовательно, вам нужно установить необходимые библиотеки на хост ; устанавливать на build бессмысленно). И он более надежен / самодостаточен, если вы распространяете встроенный компилятор: если на предполагаемом хосте не установлен GMP et c, тогда у вас будет дополнительная работа на этом хосте.
второй подход более сложен, потому что вам нужно собрать / установить необходимые компоненты на хосте; правильная версия, правильные флаги конфигурации и т. д. c.
С другой стороны, вам нужно создать предварительные условия только один раз для каждого хоста. Когда вы настраиваете / перестраиваете компилятор более одного раза, например, когда вы занимаетесь разработкой G CC, тогда это немного более быстрый цикл.
В первом случае версии lib не зависят от хоста версии библиотек; G CC на самом деле не заботится о том, присутствуют ли библиотеки на хосте, потому что он использует свою собственную «копию». Библиотеки будут статически связаны с исполняемым файлом, поэтому вы их нигде не найдете (возможно, G CC имеет возможность делать общие сборки в дереве для библиотек, я не знаю).
Я очень предпочитаю 1-й подход, потому что он самодостаточен и проще, в частности потому, что я часто строю G CC как канадский кросс, то есть build ≠ host ≠ target ≠ build.