кросс-компиляторы - PullRequest
       26

кросс-компиляторы

2 голосов
/ 01 декабря 2010

Я понимаю, что такое кросс-компиляторы и почему они используются. Но в одном из интервью меня спросили, чем кросс-компиляторы отличаются от обычных компиляторов. Я рассказал им о назначении кросс-компиляторов. Также карта памяти у них будет другая. Но парень, кажется, не убежден. Кто-нибудь может сказать мне основные отличия от обычных компиляторов?

Ответы [ 6 ]

3 голосов
/ 01 декабря 2010

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

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

действительно кросс-компиляторы могут ориентироваться на множество платформ из одного исходного кода.но вам, возможно, придется построить каждый из них отдельно

0 голосов
/ 14 марта 2013

Я думаю, что кросс-компилятор использует другой код на ассемблере.например, i386 и arm используют разные коды ассемблера.

0 голосов
/ 01 декабря 2010

Некоторые кросс-компиляторы имеют подключаемые генераторы кода, поэтому вы просто указываете тот тип кода, который вы хотите сгенерировать, и они будут искать соответствующий генератор и вызывать соответствующий ассемблер для указанной цели. По большей части, тем не менее, компилятор - это компилятор; все они делают одно и то же.

0 голосов
/ 01 декабря 2010

Основное отличие состоит в том, что с помощью "обычного компилятора" вы можете запускать скомпилированный исполняемый файл прямо на компьютере, на котором его скомпилировали. С кросс-компилятором вам придется каким-то образом загрузить его в систему, используя целевую платформу, чтобы запустить его и посмотреть, работает ли он. (Или используйте какой-нибудь эмулятор или ВМ).

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

0 голосов
/ 01 декабря 2010

Обычный компилятор может быть кросс-компилятором. Например, GCC .

Цитата из Википедия :

GCC, коллекция бесплатных программ компиляторы, могут быть настроены для пересечения компиляции. Поддерживает множество платформ и языки. Однако из-за ограниченного волонтерское время и огромное количество работать, чтобы поддерживать работу кросс-компиляторы, во многих выпусках некоторые из кросс-компиляторов сломанный. [нужная цитата]

GCC требует, чтобы скомпилированная копия binutils будут доступны для каждого целевая платформа. Особенно Важным является GNU Assembler. Следовательно, binutils сначала должен быть правильно скомпилирован с переключателем --target = некоторая цель отправляется в скрипт конфигурации. GCC также должен быть настроен с тем же --target вариант. GCC может быть запущен в обычном режиме при условии, что инструменты, которые binutils создает, доступны в путь.

...