【问题标题】:Compiling CodeViz patch for GCC on 64 bit debian在 64 位 debian 上为 GCC 编译 CodeViz 补丁
【发布时间】:2013-12-31 07:05:18
【问题描述】:

我正在尝试在 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 中的函数声明有关。

感谢任何帮助。

【问题讨论】:

  • 根据fossies.org/linux/privat/codeviz-1.0.12.tar.gz/index_ap.html,包有debian/,特别是debian/rules文件,可以使用dpkg-buildpackage程序编译,而无需做任何“任何事情”
  • 我已经尝试过了,也尝试了各种 debian 补丁版本的 gcc。至于 debian/rules 文件,它只是调用一个 bash 脚本来下载 vanilla gcc,应用补丁,然后像我上面那样编译 gcc。
  • 好吧,我以为你没注意到

标签: c++ c gcc codeviz


【解决方案1】:

这个补丁可以应用到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 \

发生主要错误是因为函数fprintfThe 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

【讨论】:

    猜你喜欢
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2011-03-30
    • 2016-11-15
    相关资源
    最近更新 更多