2017-05-26 141 views
-1

我想覆蓋共享庫中定義的宏。C編程:重新定義共享庫中定義的宏(.so)

例如:

libxyz.so(共享庫)具有

#define ADDRESS 0 

int some_func() 
{ 
    ... 
    func_use_addr(ADDRESS); 
} 

現在我寫的一個代碼,其中,我想 「some_func()」 使用的地址是(比方說)0xabc36000 。

我可以在my.c文件中重新定義ADDRESS宏,以便它可以用作0xabc36000而不是some_func()中的0嗎?

我知道宏在預處理階段被替換,並且在稍後發生與共享庫的鏈接。我想知道是否有辦法做到這一點,不用修改共享庫代碼。

+8

你在最後一段回答你自己的問題。只是明確地重申:不,這是不可能的。 –

+3

共享庫沒有預處理器符號(只有源代碼有它們)。所以你可以從源代碼 –

+0

重新編譯你的共享庫你必須用新地址作爲參數來覆蓋包含對'func_use_addr()'的調用的整個函數'some_func()'。 – Ctx

回答

-4

是的,你可以重新定義一個宏。

#ifdef ADDRESS 
#undef ADDRESS 
#endif 

#define ADDRESS 0xabc36000 
+1

...但是,不會對已經預處理,編譯和鏈接的共享對象執行任何操作。 – Quentin