При попытке кросс-компиляции glib со следующими параметрами конфигурации возникают следующие ошибки:
./configure --prefix=$HOME --host=arm-hisiv400-linux
checking for growing stack pointer... configure: error: in `/home/aa/Hi3536_SDK_V2.0.4.0/glib-2.50.0':
configure: error: cannot run test program while cross compiling
See `config.log' for more details
Есть ли способ отключить эти тесты, чтобы мой процесс кросс-компиляции мог пройти?
решение1
Стандартной практикой в подобных ситуациях является использованиеФайл по умолчанию для сайта Autoconfсодержащий соответствующие значения для тестов, которые configure
необходимо запустить.
В этом конкретном случае,configure
пытается определить, в каком направлении растет стек:
volatile int *a = 0, *b = 0;
void f (int i) { volatile int x = 5; if (i == 0) b = &x; else f (i - 1); }
int main () { volatile int y = 7; a = &y; f (100); return b > a ? 0 : 1; }
Итак, вы кросс-компилируете этот код, запускаете его на целевой платформе и изучаете его код выхода ( echo $?
). Создайте файл сайта по умолчанию для целевой архитектуры, например config.arm-hisiv400-linux
, и добавьте строку с
glib_cv_stack_grows=yes
(если код выхода выше был 0), или
glib_cv_stack_grows=no
(если код выхода был 1).
Затем запустите configure
, CONFIG_SITE
указав полный путь к файлу сайта по умолчанию, который вы только что создали:
CONFIG_SITE=/path/to/config.arm-hisiv400-linux ./configure --prefix=$HOME --host=arm-hisiv400-linux
configure
следует использовать значение из файла сайта по умолчанию, пропуская тест для стека. Вероятно, он не пройдет следующий тест, который должен запустить программу, скомпилированную для цели, но вы можете исправить это тем же способом, добавив больше записей в файл сайта по умолчанию (при условии, что configure.ac
используется AC_CACHE_VAL
около AC_TRY_RUN
).