Я пытаюсь создать предварительно скомпилированный файл заголовка для моей общей библиотеки, используя GCC. После создания необходимой конфигурации и пытается построить, я получил эти предупреждения:Предварительно скомпилированный файл заголовка для проекта общей библиотеки с использованием GCC
cc1plus: warning: ./PrecompiledHeaders.h.gch/.c++: created and used with different settings of -fpic [enabled by default]
Через некоторое время поисков, я нашел этот кусок кода, который, кажется, предположить, что PCH не работает с общим кодом:
/* -fpic and -fpie also usually make a PCH invalid. */
if (data[0] != flag_pic)
return _("created and used with different settings of -fpic");
if (data[1] != flag_pie)
return _("created and used with different settings of -fpie");
data += 2;
Итак, я поменял свою библиотеку на статическую библиотеку, и ошибка исчезла, а время компиляции было сокращено! Так действительно ли возможно иметь PCH с разделяемой библиотекой? Если да, есть ли какая-нибудь работа вокруг этого?
Спасибо за комментарий. Пожалуйста, см. Ответ, который я только что добавил, и дайте мне знать, если у вас есть какие-либо комментарии по этому поводу. – Rafid
'-fPIC' является единственным вариантом для x86_64 для общих объектов. Я не слишком разбираюсь в сложных деталях, но вы найдете больше информации и ссылок здесь: http://stackoverflow.com/questions/3961446/why-does-gcc-not-implicitly-supply-the-fpic- flag-when-compiling-static-librarie - вот почему я сказал «использовать одни и те же параметры», а не точно указать, какой флаг вы должны добавить - точные параметры зависят от вашей архитектуры. – Mat