关于库中已弃用的全局变量使用的 GCC 消息
GCC message on deprecated global variable usage from a library
我有一个带有全局变量的 C 静态库。
我的目标是在程序中使用库中的全局变量时,在编译时向用户打印一条消息。
我试图将变量标记为 __attribute__((deprecated))
。但是即使设置了 -Werror
,我也需要用户能够构建。
因此我尝试添加 #pragma GCC diagnostic warning "-Wdeprecated-declarations"
,但它似乎只在图书馆内活跃,如果用户 link 使用图书馆则不会。
您可以使用链接器代替,如在例如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 静态库。 我的目标是在程序中使用库中的全局变量时,在编译时向用户打印一条消息。
我试图将变量标记为 __attribute__((deprecated))
。但是即使设置了 -Werror
,我也需要用户能够构建。
因此我尝试添加 #pragma GCC diagnostic warning "-Wdeprecated-declarations"
,但它似乎只在图书馆内活跃,如果用户 link 使用图书馆则不会。
您可以使用链接器代替,如在例如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