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

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

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

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


person Jay    schedule 01.03.2012    source источник


Ответы (3)


  1. Нет другого пути нет - вы должны создавать библиотеки (статические или нет) для каждой платформы. Как вы, наверное, уже знаете, статическая библиотека — это всего лишь контейнер, в котором хранится набор объектных файлов. Каждый объектный файл содержит двоичный код, специфичный для платформы, для которой была создана библиотека (читай: другой набор инструкций по сборке).
  2. Да, сохранение одинаковых параметров компилятора при создании библиотеки и бинарного файла (программы), который ее использует, является очень хорошей практикой. Таким образом, вы избегаете потенциально очень неприятных проблем. Некоторые параметры оптимизации несовместимы с двоичным кодом (например: вы можете скомпилировать функцию в библиотеке с оптимизацией, которая заставит ее возвращать (или ожидать) данные по регистру), но ваша основная программа может ожидать, что функция вернет их по адресу на стек - большие неприятности.
person sirgeorge    schedule 01.03.2012
comment
1. Обратите внимание, что OS X поддерживает полные двоичные файлы, а инструментальная цепочка поддерживает компоновку полных статических библиотек (за исключением ar), поэтому вы можете создать общую библиотеку, но вам все равно придется создавать ее для каждой архитектуры отдельно. - person tc.; 23.04.2012

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

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

person Tio Pepe    schedule 01.03.2012

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

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

person jørgensen    schedule 01.03.2012