我的程序包含許多外部定義的變量。當我使用-O0標誌進行編譯時,我在符號表中看到它們,但在使用-O1或-O2時看不到它們。我如何強制編譯器導出它們?當使用優化時,gcc在符號表中不包含extern變量
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'中使用'my_symbol'嗎? –
症狀表明該變量已被優化。嘗試使用它,做一些無法優化的東西。例如,'printf'它的值,並沒有在這個文件中定義它的值。 –
@ user3638885如果你沒有在你的'foo.c'中使用它,爲什麼你首先在源文件中聲明它? –