8.2.1 Кросс-компиляция с помощью configure

Предыдущая  Содержание  Следующая V*D*V

Наиболее общая форма использования configure для кросс-компиляции такая:

 

# export CC=<target>-linux-gcc

# export NM=<target>-linux-nm

# export AR=<target>-linux-ar

# ./configure --host=<target> --build=<build_system>

 

<build_system> это система, на которой выполняется сборка, чтобы создать программы, которые работают на <target>. Например, для настольного компьютера Linux/i686 и целевой платформы ARM, <build_system> это i686-linux, а <target> это arm-linux.

 

# export CC=arm-linux-gcc

# export NM=arm-linux-nm

# export AR=arm-linux-ar

# ./configure --host=arm-linux --build=i686-linux

 

Флаг --build должен указываться не всегда. В большинстве случаев скрипт configure сделает подходящее предположение о системе, на которой происходит сборка.

Обратите внимание, что не всегда необходимо, чтобы работа configure для кросс-компиляции была успешной при первой попытке. Самой распространённой ошибкой во время кросс-компиляции является

 

configure: error: cannot run test program while

                  cross compiling

 

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

Чтобы решить эту проблему, изучите вывод скрипта конфигурации, чтобы определить тест, который даёт ошибку. Чтобы получить более подробную информацию об ошибке, откройте файл config.log. Например, предположим, что вы запустили настройку и получили ошибку:

 

# export CC=arm-linux-gcc

# ./configure --host=arm-linux

 

     …

checking for fcntl.h... yes

checking for unistd.h... yes

checking for working const... yes

checking size of int...

configure: error: cannot run test program while

                  cross compiling

 

В приведенном выше примере configure пытается найти размер int. Для того, чтобы найти размер целого числа на целевой системе, он компилирует программу вида main(){ return (sizeof(int))}. Выполнение программы будет неудачным, так как система, на которой происходит сборка, не соответствует целевой системе.

Для решения таких проблем вам необходимо отредактировать файл config.cache. Напомним, что перед началом проверки configure считывает значения из файла config.cache. Всё, что вам необходимо сделать, это найти тестовую переменную в скрипт configure и добавить эту запись в желаемом виде в файл config.cache. В приведённом выше примере предположим, что  размер целого числа в скрипте configure определяет переменная ac_sizeof_int_set. Затем добавляем в config.cache следующую строку:

 

ac_sizeof_int_set=4

 

После этого изменения вывод configure теперь такой:

 

    …

checking for fcntl.h... yes

checking for unistd.h... yes

checking for working const... yes

checking size of int...(cached) yes

    …

 

Предыдущая  Содержание  Следующая