Насколько безопасно повторное использование config.cache для кросс-компиляции? - PullRequest
0 голосов
/ 14 мая 2019

Обычно достаточно ./configure --host=xxx. Однако иногда это является источником очень тонких ошибок - ./configure не всегда жалуется (и терпит неудачу), если что-то не на 100% верно.

Например, мне не раз случалось, что какая-то особенность была просто угадана и, как вы можете себе представить, иногда это предположение было неправильным, и ошибка (странное поведение) была замечена очень позже.

В таких случаях я решаю ее, просматривая configure, записывая неверно угаданную переменную, проверяя ее правильное значение на реальном оборудовании, помещая ее в файл config.cache и перезапуская весь процесс с помощью --config-cache.

У меня вопрос: насколько безопасно на самом деле создать целом config.cache на реальном оборудовании и скопировать его на компьютер сборки?

Очевидно, что установленные библиотеки должны быть такими же, но как насчет других возможных проблем - например, что если какой-либо инструмент (grep, python и т. Д.) Установлен в каком-то другом месте? Или это вообще отсутствует? Может ли ./configure справиться с этим (обновить недопустимое значение на проверенное)?

Пока кажется, что единственное, что нужно обновить в config.cache, это ac_cv_env_host_alias_set и setac_cv_env_host_alias_value, тогда ./configure счастливо продолжается.

1 Ответ

1 голос
/ 16 мая 2019

Мой вопрос: насколько безопасно на самом деле создать весь config.cache на реальном оборудовании и скопировать его на компьютер сборки?

Не очень безопасно.Хотя некоторые вещи, которые configure определяет, и кеши - это свойства целевой системы, я ожидаю, что многие из них будут build-system свойствами, такими как сведения о кросс-компиляции инструментария и кросс-библиотек, которые вы используете.Вы не можете надежно определить такие вещи, запустив configure на предполагаемой хост-системе.Я удивлен, что ваши усилия в этом направлении не столкнулись с большим количеством неприятностей, чем вы описываете.Это, вероятно, признак кросс-среды разработки, которая хорошо построена и -конфигурирована для своей цели.

Очевидно, установленные библиотеки должны быть одинаковыми

Возможно, это одна из наименьших проблем в вашем предложении.

но как быть с другими возможными проблемами - например, что если какой-либо инструмент (grep, python и т. д.) установлен в каком-то другом месте?Или он вообще отсутствует?

Да, если для сборки требуются те или иные инструменты, то эти детали являются некоторыми из свойств системы сборки, о которых я говорил.

Может ли ./configure обработать это (обновить недопустимое значение на проверенное)?

Нет.Если configure полагается на файл кэша, то дело в том, что он не перепроверяет кэшированные результаты.Скорее всего, вы могли бы создать такую ​​вещь вручную для проекта, который вы поддерживаете сами, но это не очень выполнимо для стороннего кода, особенно если вы создаете несколько пакетов.

Я думаю, что итогявляется то, что кросс-компиляция является сложной задачей.Собственная компиляция должна быть предпочтительнее, если это возможно, даже если вам нужно делать это в виртуальной среде, а не в физической.И если вы можете успешно запустить скрипт проекта configure в целевой среде, то, вероятно, у вас есть собственная среда разработки, достаточная для такой собственной сборки.

...