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

По крайней мере, в Linux и Solaris статические библиотеки на самом деле представляют собой просто набор скомпилированных .o, помещенных в один большой файл. При компиляции статической библиотеки обычно флаг -fpic опускается, поэтому сгенерированный код зависит от позиции.

Теперь скажите, что моя статическая библиотека - B. Я построил ее и получил результирующий файл .a, который на самом деле представляет собой просто глобул из всех зависимых от позиции файлов .o. Теперь у меня есть общая библиотека, которую я хотел бы собрать, A, и я хочу, чтобы она статически связывала B. Когда я собираю A, естественно, я буду использовать флаг -fpic, чтобы сделать сгенерированную позицию кода независимой. Но если я буду ссылаться на B, не смешиваю ли я объектно-зависимые и независимые от позиции объектные файлы?

Я получаю много ошибок перемещения текста, если я также не укажу -mimpure-text, и я думаю, что это может быть причиной. Кажется, когда я собираю библиотеку, мне действительно нужно ее скомпилировать3 времена, совместно используемая версия, статическая версия и статическая версия, которая может быть использована общими библиотеками. Я прав? Я мог бы просто продолжать использовать -mimpure-text, но страница man g ++ говорит, что если вы это сделаете, объект на самом деле не будет разделен (хотя неясно, все ли это общие ресурсы или только статически связанные части, кто-нибудь знает?) ,

Ответы на вопрос(3)

Ваш ответ на вопрос