2010-07-15 2 views
0

Я тестирую, чтобы убедиться, что мой кросс-компилятор работает. Когда я компилирую мир hello, он, кажется, компилируется отлично, но когда я меняю hello.cpp на ту же самую программу, которая петляет 1000 раз, генерируемый файл эльфа точно такого же размера. Независимо от того, какие изменения я делаю, файл всегда одного размера, и, насколько я могу судить, имеет такое же содержимое. Что может вызвать это?Мой кросс-компилятор всегда компилирует один и тот же файл

+1

Ахм ... вы передаете в него нужный файл? – Bobby

+2

Или забыли нажать «сохранить» в своем редакторе? (Я тоже это сделал) – Dan

+0

Минимальный размер для исполняемых файлов ELF (например, для Windows EXE)? «hello world» был бы довольно крошечной программой, если бы она была связана динамически, даже если она зацикливалась 1000 раз. Разумеется, разница была бы очевидна, если бы вы ее запустили. – cHao

ответ

2

Без дополнительной информации вам будет очень тяжело помочь. Но вот несколько идей:

  1. Как говорит Бобби, вы уверены, что передаете ему правильные файлы?

  2. Вы уверены, что исполняемый файл, который вы используете, является сгенерированным?

  3. Является ли компиляция действительно успешной? Исполняемый файл, который вы запускаете, может быть одним из последних успешных запусков компилятора, а не ваших текущих попыток компиляции.

  4. Как вы предлагаете, вы абсолютно уверены что файлы одинаковые? Разве говорят, что они одинаковы? Возможно, что любые изменения, которые вы делаете, оптимизируются - особенно если вы вносите изменения в код, который даже не вызван.

Действительно, вероятность того, что вы на самом деле не делаете то, что считаете своим делом.

  1. Убедитесь, что ваши команды компиляции - будь то в командной строке или в файле make или что-то еще - верны.

  2. Возможно, вам удастся удалить исполняемый файл, чтобы убедиться, что на самом деле создается новый.

  3. Посмотрите, что делает компилятор, если вы специально пытаетесь скомпилировать мусор. Он не должен компилироваться. Если да, то вы не компилируете то, что, по вашему мнению, компилируете.

+0

Я бежал diff и, по-видимому, «насколько я могу судить» не достаточно далеко. Я думаю, что раздел .text, связанный с фактической программой для каждой компиляции, просто ничтожен по сравнению с другими сегментами файла эльфа. Я скомпилировал hello.cpp, nothello.cpp и junk.cpp. привет и nothello были разными (хотя это не так), а хлам не собирался. –

6

Что это значит «насколько я могу судить»? Вы можете проверить это с помощью diff или какой-либо другой утилиты. Если вы используете кросс-компилятор для небольшого устройства, у него может быть причина для выделения вывода в блоках определенного размера или даже для предварительного распределения размера устройства. Можете ли вы проверить с помощью какого-то инструмента, который вы действительно получите точно таким же файлом?

+0

Похоже, что на самом деле я не получаю точно такой же файл.Что касается меня сейчас, так это то, что я предположительно утверждал флаг статических библиотек в gcc, поэтому динамическое связывание не должно происходить. Когда я компилирую мир привет и пустую главную, они «почти» идентичны, хотя отображение приветствия в мире часто требует множества инструкций. –

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