Я пытаюсь скомпилировать CodeViz на 64-разрядном Debian. Тем не менее, я считаю, что включенный патч для GCC заставляет GCC не компилироваться. Когда я извлекаю GCC 4.6 и компилирую его вручную (путем запуска
$ ../gcc-4.6.4/configure --prefix=/home/jeremy/gcc-codeviz --enable-languages=c,c++ --disable-bootstrap
$ make
) он компилируется без ошибок. Однако, когда я применяю включенный патч, он терпит неудачу с ошибкой
/usr/bin/ld: ../libsupc++/.libs/libsupc++convenience.a(cp-demangle.o): relocation R_X86_64_32S against '.rodata' can not be used when making a shared object; recompile with -fPIC
../libsupc++/.libs/libsupc++convenience.a(cp-demangle.o): error adding symbols: Bad value
collect2: ld returned 1 exit status
Патч можно увидеть здесь http://pastebin.com/djSQYe5a. Это действительно не так сложно, не меняет никаких вариантов сборки или включает, и не использует каких-либо расширенных функций языка. Я действительно не понимаю, как это вызывает ошибку связывания, которая не отображается в сборке gcc vanilla. Кроме того, сама ошибка возникает в "cp-demangle.o", о которой я даже не думаю, что ее даже коснется патч! Мое лучшее предположение заключается в том, что оно имеет какое-то отношение к объявленному extern int cdepn_dump или объявлению функций в tree.h.
Любая помощь приветствуется.
Этот патч может быть применен к источнику Debian gcc-4.6
apt-get source gcc-4.6
cp gcc-4.6.2-cdepn.diff gcc-4.6-4.6.3/debian/patches
to rules.patch
nano gcc-4.6-4.6.3/debian/rules.patch
debian_patches += \
libstdc++-pic \
...
gcc-4.6.2-cdepn \
Основная ошибка возникает из-за функции fprintf. Флаги компилятора по умолчанию включают -Wformat -Wformat -security, что и дает эту ошибку. Отключено с помощью -Wformat = 0 или -Wno-format-security в CPPFLAGS или/и CFLAGS.
Также смотрите gcc-4.6-4.6.3/debian/patches/fix-warnings.diff для src/gcc/toplev.c и gcc-4.6-4.6.3/debian/rules2, dpkg-buildflags только для информации.
export DEB_BUILD_MAINT_OPTIONS=hardening=-all,-format
export DEB_CFLAGS_MAINT_APPEND=-fPIC,-Wformat=0,-Wno-format-security
export DEB_CPPFLAGS_MAINT_APPEND=-fPIC,-Wformat=0,-Wno-format-security
export DEB_CXXFLAGS_MAINT_APPEND=-fPIC,-Wformat=0,-Wno-format-security
dpkg-buildflags
dpkg-buildpackage -b -d -rfakeroot -us -uc
debian/
и, в частности,debian/rules
, который можно использовать для компиляции с использованием программыdpkg-buildpackage
без необходимости Делать что-нибудь"