Двоичная совместимость между avr-gcc 3.4.0 и avr-gcc 4.3.x - PullRequest
2 голосов
/ 28 октября 2010

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

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

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

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

1 Ответ

2 голосов
/ 28 октября 2010

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

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

...