Бинарная совместимость между avr-gcc 3.4.0 и avr-gcc 4.3.икс


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

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

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

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

1 2

1 ответ:

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

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