2010-12-01 3 views
2

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

+0

Как вы считаете, в чем цель? – mkb 2010-12-01 14:03:50

+1

Некоторые интервьюеры хорошо держатся в недоступном состоянии независимо от вашего ответа. Может быть, вы его убедили, но он не хотел сильно реагировать на ваш ответ. – 2010-12-01 14:05:49

+0

Хороший совет для такого рода ситуаций - спросить, на что они верят, ответ. Даже если вы не получите работу, вы узнаете что-то новое. У меня была аналогичная ситуация, когда меня спрашивали о многопоточности в интервью. Многопоточность очень сильно используется, как правило, излишне. Интервьюер спросил, когда это будет полезно, и я не мог придумать действительно хороший пример и задал ему тот же вопрос. Я не получил работу, но я действительно увеличил знания о программировании с действительно хорошим ответом. – AlastairG 2010-12-01 14:08:47

ответ

0

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

Цитируя Wikipedia:

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

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

3

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

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

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

0

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

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

0

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

0

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

Смежные вопросы