Трябва ли статичните библиотеки винаги да се създават със същите опции на компилатора като приложението?

Имаме библиотека за многократна употреба, която се доставя до множество продукти. Повечето от продуктите са във 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