5

私のシステムで何かをコンパイルすると (bfin-linux-uclibc-g++ただし、それは無関係です)、コンパイラ フラグの 1 つに関して (自分のコード ベースではなく) 何百もの警告が表示されます。無効にしたい。

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定義されているようなものがないため、使用できません。

4

2 に答える 2

1

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 スクリプトでも使用できます./configure CXX='g++ -specs=/path/to/better_specs'

于 2016-08-30T13:29:36.143 に答える