Должны ли статические библиотеки всегда создаваться с теми же параметрами компилятора, что и в приложении? - PullRequest
2 голосов
/ 01 марта 2012

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

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

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

Ответы [ 3 ]

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

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

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

0 голосов
/ 01 марта 2012

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

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

...