Всегда ли статические библиотеки должны быть собраны с теми же параметрами компилятора, что и приложение?

У нас есть многократно используемая библиотека, которая распространяется на несколько продуктов. Большинство продуктов находятся в VxWorks и используют компилятор gcc. Но каждая из них будет работать на разных архитектурах, таких как PPC, MIPS, а в самой PPC существует больше типов, таких как 8531, 8620 и т. Д.

В настоящее время я строю статические библиотеки для каждой из этих плат отдельно и предоставляю. В любом случае можно ли создать общую библиотеку, которая может использоваться во всех этих разных архитектурах?

Кроме того, в настоящее время я стараюсь, чтобы параметры компилятора были такими же, как и у продуктов. Это необходимо? Есть ли в Интернете какая-либо информация, которая классифицирует, какие параметры важно поддерживать одинаковыми для статических библиотек и приложений?

3 ответа

Решение
  1. Нет, другого пути нет - вы должны создавать библиотеки (статические или нет) для каждой платформы. Как вы, наверное, уже знаете, статическая библиотека на самом деле является просто контейнером, в котором хранится множество объектных файлов. Каждый объектный файл содержит двоичный код, специфичный для платформы, для которой была создана библиотека (читай: другой набор инструкций по сборке).
  2. Да, сохранение параметров компилятора одинаковыми при сборке библиотеки и двоичного файла (программы), использующего ее одинаково, является очень хорошей практикой. Таким образом, вы избегаете потенциально очень неприятных проблем. Некоторые параметры оптимизации несовместимы с двоичным кодом (например, вы можете скомпилировать функцию в библиотеке с оптимизацией, которая заставит ее вернуть (или ожидать) данные по регистру), но ваша основная программа может ожидать, что функция возвращает ее по адресу стек - большая беда.

Это зависит от каждого варианта: параметры платформы и архитектуры, очевидно, должны быть одинаковыми. Другие, такие как оптимизация, отладка, профилирование, могут отличаться.

Представьте, что библиотека может быть предоставлена ​​внешним разработчиком, так что вы на самом деле не знаете, как он ее скомпилировал, только требования к платформе и архитектуре.

Кроме того, в настоящее время я стараюсь, чтобы параметры компилятора были такими же, как и у продуктов. Это необходимо?

"2. Нужно - нет. Фактически, большинство библиотек можно считать автономными и не привязанными к какому-либо конкретному продукту (то есть их можно использовать из многих продуктов). Как таковые, специфичные для продукта флаги просто не входят в библиотеку, или наоборот (специфические флаги реализации библиотеки не должны появляться при компиляции объектов продуктов).

Другие вопросы по тегам