2012-05-18 41 views
4

我想使用修改後的glibc庫。 glibc庫靜態鏈接到我的代碼。我已經在glibc庫中聲明瞭一個新變量(我們稱它爲my_libc_var)。但是,當我嘗試將該變量包含在我的程序中時(使用extern關鍵字的課程),我得到undefined reference錯誤。我怎麼解決這個問題?如何引用靜態庫中聲明的變量?

在glibc中,變量聲明如下。

int my_libc_var; 

而在我的程序中,它被聲明如下。

extern int my_libc_var; 
+0

請向我們展示如何聲明您的變量。 –

+0

現在進行編輯以顯示它是如何聲明的。 – pythonic

+0

你確定你正在鏈接你的修改過的glibc嗎?你可以粘貼編譯器結果嗎? – Ponytech

回答

1

檢查是否在編譯過程中所添加的變量包括在其中使用像-fvisibility=hidden-fvisibility=internal選項編譯源文件。這將使您的符號不可從其他模塊中引用。

類似的行爲,只要你使用gcc中,使用得到的任一:

#pragma GCC visibility push("hidden") 

其可以被放置在源文件的開頭,或:

int var __attribute__ ((visibility ("hidden"))); 

符號的定義(顯然你沒有放置,但我把它放在這裏來完成我的答案)。

有關更多信息,請參閱gcc attribute overview page