LINUX.ORG.RU

gcc, pch и fpie


0

2

Пытаюсь собрать gnash с включенной опцией precompiled headers - возникает проблема: хедер создается, но при попытке использования gcc ругается на то, что он был создан с другими ключами

cc1plus: warning: ../all-includes.h.gch: created and used with different settings of -fpie [enabled by default]
cc1plus: error: one or more PCH files were found, but they were invalid

Я не вижу особых различий в ключах компилятора:

g++ -DHAVE_CONFIG_H   \
   -D_FORTIFY_SOURCE=2  -g -O2          -W     -Wall     -Wcast-qual
   -Wpointer-arith     -Wreturn-type     -Wnon-virtual-dtor     -Wunused
   -fvisibility-inlines-hidden -fPIE -fstack-protector --param
   ssp-buffer-size=4 -Wformat -Werror=format-security  -fPIC -DPIC \
     -I. -I.. -I.. -I../libamf -I../libnet -I../libcore -I../libcore/parser
     -I../libcore/swf -I../libcore/vm -I../libbase -I../backend
     -I../libcore/abc -I../libcore/asobj -I../libcore/asobj/flash -I../libltdl
     -I../libcore/vm -I../libmedia -I../libsound -pthread   -x c++-header -c
     -o all-includes.h.gch all-includes.h

и

g++ -DHAVE_CONFIG_H -I. -I../../libdevice -I..
-I.. -I../../libdevice -I../.. -I../../libmedia -I../../libbase
-I../../librender -I../../libcore -I../../libcore/vm -I../../libcore/parser
-I../../libcore/swf -I../../gui -pthread -I/usr/include/SDL -D_GNU_SOURCE=1
-D_REENTRANT -pthread -I/usr/include/pango-1.0 -I/usr/include/glib-2.0
-I/usr/lib64/glib-2.0/include  -I/usr/include/glib-2.0
-I/usr/lib64/glib-2.0/include   -pthread -I/usr/include/gtk-2.0
-I/usr/lib64/gtk-2.0/include -I/usr/include/pango-1.0 -I/usr/include/atk-1.0
-I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0
-I/usr/include/libpng15 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0
-I/usr/lib64/glib-2.0/include -I/usr/include/freetype2
-I/usr/include/atk-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include
-I/usr/include/libpng15    -I/usr/include/boost-1_49  -I/usr/include/agg2
-I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include
-I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng15
-D_FORTIFY_SOURCE=2  -include all-includes.h -Winvalid-pch -g -O2          -W
-Wall     -Wcast-qual     -Wpointer-arith     -Wreturn-type
-Wnon-virtual-dtor     -Wunused      -fvisibility-inlines-hidden -fPIE
-fstack-protector --param ssp-buffer-size=4 -Wformat -Werror=format-security
-MT libgnashdevice_la-DeviceGlue.lo -MD -MP -MF
.deps/libgnashdevice_la-DeviceGlue.Tpo -c -o libgnashdevice_la-DeviceGlue.lo

-fPIC (единственное замеченное существенное отличие) пробовал убирать - не помогает.

В чем причина?


--param -c -D_FORTIFY_SOURCE=2 +-D_GNU_SOURCE=1 +-D_REENTRANT -DHAVE_CONFIG_H --DPIC --fPIC -fPIE -fstack-protector -fvisibility-inlines-hidden -g +-include +-MD +-MF +-MP +-MT -o -O2 -pthread @@ -16,12 +21,10 @@ -Wcast-qual -Werror=format-security -Wformat +-Winvalid-pch -Wnon-virtual-dtor -Wpointer-arith -Wreturn-type -Wunused --x all-includes.h -all-includes.h.gch -c++-header ssp-buffer-size=4

-D_GNU_SOURCE=1, -D_REENTRANT и -DPIC - по-твоему, несущественно?

anonymous ()
Ответ на: комментарий от anonymous

Я плохо сформулировал: -DPIC я отключал вместе с -fPIC. А вот два других дефайна я банально не заметил.

Отключил PIE в целом (--disable-harden к configure), нашел, откуда берется REENTRANT - из pkg-config --cflags sdl, добавил к PCHCFLAGS SDL_CFLAGS, процесс сборки продвинулся чуть дальше, застопорился на модуле, подключающем ffmpeg и добавляющем к флагам -D__STDC_CONSTANT_MACROS. Уловка с добавлением соотв. флага к флагам для сборки PCH не помогла - другие части проекта этот дефайн не используют, соотв. с ними не собирается.

Я правильно понимаю, что для использования единых precompiled headers с gcc все файлы проекта должны собираться с одинаковыми ключами препроцессора? И альтернативой будет сборка разных PCH для частей с различными ключами?

moroz ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.