关于库中不推荐的全局变量用法的GCC消息

关于库中不推荐的全局变量用法的GCC消息,c,gcc,ld,pragma,deprecation-warning,C,Gcc,Ld,Pragma,Deprecation Warning,我有一个带有全局变量的C静态库。 我的目标是在程序中使用库中的全局变量时,在编译时向用户打印一条消息 我试图将变量标记为_属性_已弃用。但是我需要用户能够构建,即使设置了-Werror 因此,我尝试添加pragma GCC diagnostic warning-Wdeprecated声明,但它似乎仅在库中处于活动状态,而不是在用户链接到库时。您可以使用链接器,如中所述 下面是一个简短的例子: $ cat myvar.c int myvar = 0; static const char myvar

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

我试图将变量标记为_属性_已弃用。但是我需要用户能够构建,即使设置了-Werror


因此,我尝试添加pragma GCC diagnostic warning-Wdeprecated声明,但它似乎仅在库中处于活动状态,而不是在用户链接到库时。

您可以使用链接器,如中所述

下面是一个简短的例子:

$ 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 tmp.c tmp2.c
/tmp/cc2uM5Vx.o: In function `main':
tmp.c:(.text+0x6): warning: myvar is deprecated