C语言 选择性地抑制glibc链接警告



glibc使用以下"技术"生成链接警告…

#define link_warning(symbol, msg) 
  __make_section_unallocated (".gnu.warning." #symbol) 
  static const char __evoke_link_warning_##symbol[]     
  __attribute__ ((used, section (".gnu.warning." #symbol __sec_comment))) 
  = msg;

对于由此产生的特定链接警告,是否有任何命令行开关可以传递给ld或gcc以抑制它?

(对于编译时警告,可以使用"#pragma diagnostic foo ignore"来抑制)

是否有任何命令行开关可以传递给ld或GCC以抑制它

首先,重要的是要记住,警告(通常)是有原因的。如果你能找到一种方法来避免连接警告所指向的符号,这是一个更好的行动方案。

现在…正如问题所指出的,链接器发出警告是因为它们位于名为'.gnu.warning.*'的库部分中。正如在这个答案中详细解释的那样,没有办法通过命令行开关来抑制这一点。

但是重命名相关部分将会抑制警告。

(您可以尝试删除这些section,但是__evoke_*符号在重定位表中被引用。重命名更简单,并且可以在将来逆转-当然,您应该备份您这样做的任何库的原始文件。

objcopy --rename-section .gnu.warning.<symbol>=.xgnu.warning.<symbol> libX.a libX-nowarnings.a

您可以链接修改后的库,或者替换原来的库。当然,这是否可行或可取取决于您的具体情况。

最新更新