c - 关于库中已弃用的全局变量使用的 GCC 消息

标签 c gcc ld pragma deprecation-warning

我有一个带有全局变量的 C 静态库。 我的目标是每当程序中使用库中的全局变量时,在编译时向用户打印一条消息。

我尝试将变量标记为 __attribute__((deprecated))。但即使设置了 -Werror,我也需要用户能够构建。

因此,我尝试添加#pragma GCC 诊断警告“-Wdeprecated-declarations”,但它仅在库内显得活跃,而在用户链接到库时则不会。

最佳答案

您可以使用链接器,如中所述。 ninjalj's blog .

这是一个简短的示例:

$ cat myvar.c
int myvar = 0;
static const char myvar_warning[] __attribute__((section(".gnu.warning.myvar"))) =
  "myvar is deprecated";
$ cat main.c
extern int myvar;
int main() {
  return myvar;
}
$ gcc main.c myvar.c
/tmp/cc2uM5Vx.o: In function `main':
tmp.c:(.text+0x6): warning: myvar is deprecated

关于c - 关于库中已弃用的全局变量使用的 GCC 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41889847/

相关文章:

c - dmalloc 提供返回地址信息显示 `unknown' ?

c++ - 显示枚举值名称的通用方法

c++ - 哪个 gcc 和 g++ 版本支持 c 和 c++ 的哪个标准?

c++ - 在 makefile 中设置 GCC 路径

macos - nasm - 无法在 macOS Mojave 上将目标文件与 ld 链接

iphone - C/生成一个 1 到 4 之间的随机数,用 arc4random( ) 去掉 3?

c - sscanf 的段错误

linux - gdb 似乎影响存储在 $eax 中的函数返回值?

c++ - 错误 : ldd outputLine: "libicui18n.so.56 => not found"

c - 'ld' 无法链接符号,尽管它们在库中