gpt4 book ai didi

gcc - 如何覆盖链接器的默认 gcc 选项?

转载 作者:行者123 更新时间:2023-12-04 21:44:29 26 4
gpt4 key购买 nike

在我的系统上,当我编译某些内容时(使用 bfin-linux-uclibc-g++ 但这无关紧要),我收到数百个关于编译器标志之一的警告(不在我自己的代码库中)。我想禁用它。

fde encoding in src/SpiMessageUtil.o(.eh_frame) prevents .eh_frame_hdr table being created.

这源于一个默认的 gcc 标志,该标志被移交给链接器,通过添加 '-v' 很容易检查。到编译步骤:
COLLECT_GCC_OPTIONS=... --eh-frame-hdr ...

我想摆脱这个选项,它确实是默认定义的:
bfin-linux-uclibc-g++ -dumpspecs | grep frame-hdr
%{!static:--eh-frame-hdr}\
%{mfdpic: -m elf32bfinfd -z text} %{shared} %{pie} \
%{static:-dn -Bstatic} %{shared:-G -Bdynamic} \
%{!shared: %{!static: %{rdynamic:-export-dynamic} \
%{!dynamic-linker:-dynamic-linker \
%{mglibc:%{muclibc:%e-mglibc and -muclibc used together;:%e-mglibc not supported for this target};:/lib/ld-uClibc.so.0 \
}}}\
%{static}} -init __init -fini __fini

如何覆盖此选项?我无法使用 -Wl,--no-eh-frame-hdr ,因为没有类似的定义。

最佳答案

您可以动态转储 GCC 的规范,从那里删除此开关并在链接时使用它,即:

g++ -dumpspecs | sed -e 's,--eh-frame-hdr,,g' > better_specs
g++ -specs=better_specs -o target file1.o file2.o -llib1...

这将替换内联规范,同时保持原始编译器完好无损。

如果您保留自己的 Makefile,也可以通过以下方式处理:
$(TARGET): $(OBJS) | better_specs
$(LINK.o) $(OUTPUT_OPTION) -specs=$| $^

better_specs:
$(CXX) -dumpspecs | sed -e 's,--eh-frame-hdr,,g' > $@

这种方法也可以与配置脚本一起使用,前提是您之前生成了 Better_specs,您可以使用 ./configure CXX='g++ -specs=/path/to/better_specs' .

关于gcc - 如何覆盖链接器的默认 gcc 选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16897958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com