【发布时间】: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。
-
好吧,我以为你没注意到