【问题标题】:How to fix "unrecognized option '-plugin`" when using gdc to compile D program?使用gdc编译D程序时如何修复“无法识别的选项'-plugin`”?
【发布时间】:2015-01-07 06:04:20
【问题描述】:

我为Linux下载了GDC,并尝试构建一个简单的D程序。执行“gdc hello.d -o hello”后输出:

[root@localhost nan]# gdc hello.d -o hello
/usr/bin/ld: unrecognized option '-plugin'
/usr/bin/ld: use the --help option for usage information
collect2: error: ld returned 1 exit status

然后我使用“gdc -v hello.d -o hello”命令,并试图找到根本原因。它显示:

......
COLLECT_GCC_OPTIONS='-v' '-o' 'hello' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
 /home/nan/x86_64-gdcproject-linux-gnu/bin/../libexec/gcc/x86_64-unknown-linux-gnu/4.9.0/collect2 -plugin /home/nan/x86_64-gdcproject-linux-gnu/bin/../libexec/gcc/x86_64-unknown-linux-gnu/4.9.0/liblto_plugin.so -plugin-opt=/home/nan/x86_64-gdcproject-linux-gnu/bin/../libexec/gcc/x86_64-unknown-linux-gnu/4.9.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccWgsSJO.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o hello /usr/lib/../lib64/crt1.o /usr/lib/../lib64/crti.o /home/nan/x86_64-gdcproject-linux-gnu/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.0/crtbegin.o -L/home/nan/x86_64-gdcproject-linux-gnu/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.0 -L/home/nan/x86_64-gdcproject-linux-gnu/bin/../lib/gcc -L/lib/../lib64 -L/usr/lib/../lib64 -L/home/nan/x86_64-gdcproject-linux-gnu/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.0/../../.. /tmp/ccEygjf5.o -lgphobos2 -lm -lpthread -lrt -lgcc_s -lgcc -lc -lgcc_s -lgcc /home/nan/x86_64-gdcproject-linux-gnu/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.0/crtend.o /usr/lib/../lib64/crtn.o

collect2 似乎无法识别“-plugin”选项。我尝试google它,但找不到任何有价值的信息。任何人都可以提出一些建议吗?提前非常感谢!

【问题讨论】:

  • -fno-use-linker-plugin 选项可能会解决此问题。
  • @jpf:是的,它有效!能详细解释一下吗?
  • 我读了it doesn't work,我正在寻找一个解释为什么会失败;-)

标签: d gdc


【解决方案1】:

这可能是因为 gdc wac 编译的 GCC 与您的发行版 gcc 不同(相同版本但具有不同的编译标志(某些插件可能丢失))。

有时可以安装缺少的插件或安装不同的 gcc。或者你可以使用

-fno-use-linker-plugin

正如jpf 建议的那样

【讨论】:

  • 我们在 debian wheezy 上编译,它支持链接器插件,因此 gcc 默认使用链接器插件。由于这些问题,从同一源(首选 linux 分发包)安装 binutils/gcc/gdc 通常是个好主意。作为一种解决方法,我可能会明确禁用 gdcproject.org 上二进制版本的链接器插件支持。 LTO 需要链接器插件支持,但目前我们仍然不支持 LTO。
  • 我正在帮助解决 Arch Linux ARM 上的 LTO 问题。如果有人可以对这个 gdc 构建配置问题有所了解,github.com/truedat101/dlang-sv-community/issues/…,那么问题在本质上似乎相似,GDC 是如何配置的。禁用链接器插件会导致不同的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
相关资源
最近更新 更多