gpt4 book ai didi

c - 使用优化时,gcc 不在符号表中包含外部变量

转载 作者:太空宇宙 更新时间:2023-11-04 07:17:13 25 4
gpt4 key购买 nike

我的程序包含许多外部定义的变量。当我使用 -O0 标志编译它时,我在符号表中看到它们,但当我使用 -O1 或 -O2 时却看不到它们。我怎样才能强制编译器导出它们?

foo.c:
extern const int my_symbol;

void my_fn()
{
void *x = &my_symbol;
// but x is not used, that's probably why it is optimised out
}

nm foo.o (with O0):
U my_symbol

nm foo.o (with O2):
<my_symbol absent>

最佳答案

如果你的foo.c只有(本质上)有

extern const int my_symbol;

然后用-O1-O2编译,那个符号会被优化掉。但是,如果您在 foo.c 中使用该符号,例如

extern const int my_symbol;
extern int my_flag;

void foo(void)
{
if (my_symbol)
my_flag = 1;
}

即使您使用 -O1-O2 编译它,所有这些符号都将存在于 foo.o 中。

关于c - 使用优化时,gcc 不在符号表中包含外部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23667601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com