Двоичная совместимость между avr-gcc 3.4.0 и avr-gcc 4.3.x

Я унаследовал приложение, которое ссылается на библиотеку, которая МОЖЕТ БЫТЬ построена с помощью gcc3. Или, может быть, с помощью компилятора imagecraft. Эта информация теперь исчезла в небесном битовом поле, и у меня осталась библиотека libXXX.a, с которой можно связать мое приложение. Я не могу перекомпилировать libXXX.a, потому что для этого требуются определенные неизвестные заголовки от imagecraft и еще где-то, которые в определенный момент могли быть вездесущими в моей среде, но теперь их нигде нет.

Мой вопрос заключается в следующем, при условии, что моя компиляция моего приложения с помощью avr-gcc версии 3.4.0 (и ссылка на эту «специальную» libXXX) привела к рабочему двоичному образу, разумно ли ожидать, что я смогу скомпилировать все остальные части мое приложение с avr-gcc 4 (у этого действия есть очень хорошие и доказанные преимущества), связать с libXXX и все равно получить работающую программу?

По сути, все сводится к следующему: совместим ли двоичный файл avr-gcc с «загадочным компилятором X, который, возможно, был avr-gcc 3.something»?

Честно говоря, я успешно скомпилировал остальную часть своего приложения с помощью avr-gcc4, связал его с библиотекой и убедился, что результат работает, но каких побочных эффектов или особенностей мне следует опасаться?


person Manjabes    schedule 28.10.2010    source источник
comment
Кажется, самое подходящее время упомянуть то, что вы, вероятно, уже знаете: резервное копирование и контроль версий — ваши друзья... но вам нужно было использовать их в прошлом, чтобы получить пользу в настоящем. Никогда не поздно начать, и ваше будущее скажет вам спасибо ;-)   -  person RBerteig    schedule 28.10.2010
comment
как я уже сказал, я унаследовал эту ситуацию ... с тех пор контроль версий был восстановлен, но это все еще не помогает мне в этом :)   -  person Manjabes    schedule 28.10.2010


Ответы (1)


Связывание библиотек из разных компиляторов (или версий) будет работать надежно, если оба компилятора используют один и тот же ABI (бинарный интерфейс приложения).

ABI конкретной платформы обычно определяется основным компилятором для этой платформы, но это можно сделать, обратившись к внешней спецификации.
Изменения ABI случаются редко, особенно если платформа поддерживает сторонние библиотеки/приложения, потому что Изменение ABI означает, что буквально все должно быть перестроено.

person Bart van Ingen Schenau    schedule 28.10.2010