在64位debian上为GCC编译CodeViz补丁

时间:2013-12-31 07:05:18

标签: c++ c gcc codeviz

我正在尝试在64位Debian上编译CodeViz。但是,我发现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。它实际上并不复杂,不会更改任何构建选项或包含,也不会使用任何高级语言功能。我真的不明白这是如何导致链接错误没有出现在vanilla gcc构建中。此外,错误本身发生在“cp-demangle.o”中,我认为甚至不应该被补丁触及!我最好的猜测是它与声明的extern int cdepn_dump或tree.h中函数的声明有关。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

此补丁可以应用于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

到rules.patch

nano gcc-4.6-4.6.3/debian/rules.patch

debian_patches += \
        libstdc++-pic \
        ...
        gcc-4.6.2-cdepn \

发生主要错误的原因是函数 fprintf The default compiler flags includes -Wformat -Wformat-security这就是出现此错误的原因。在CPPFLAGS或/和CFLAGS中禁用 -Wformat = 0或-Wno-format-security

另请参阅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