我儘量保持這個簡單,我可以(甚至壽我有一個相關的問題跑,但是這應該是比較一般。我可以在另一個c-File中更改符號(函數)的屬性嗎?
當我宣佈一個功能extern void foo(void)
有原型,並調用它在同C-文件,我可以給它的屬性weak
在另一個C-文件
原因是這樣的:?是否extern
功能foo()
實現依賴於一些編譯選項,並可能會或可能不會被添加到二進制如果這不是,我得到(顯然)錯誤undefined reference
。這就是爲什麼我要聲明它很弱(來自GCC的__attribute__((weak))
或#pragma weak
。出於某種原因(要在這裏解釋)我想在單獨的C-File中完成此操作,而不在原始聲明中添加#pragma
/attribute
? - 有沒有辦法做到這一點?如果我只是將#pragma weak foo
添加到anothr C文件中,它將不起作用。 (我用GCC 4.8.1)
//編輯:根據要求一些代碼: 注:foo
的實現不鏈接到項目
Function.c
extern void foo(void);
// #pragma weak foo <-- If I add it here, it links without problems
void bar(void)
{
foo();
}
WeakDeclaration.c
#pragma weak foo <-- If I add it here, I get undefined reference error
// EDIT2:
好吧,我要去嘗試使指定我的問題多一點 - 有沒有辦法從另一個C-文件中(WeakDeclaration.c
)
您的解釋令人困惑,請顯示一些代碼。還要定義你的意思*「它不會工作」*。 – user694733
你是否打電話或以其他方式引用該功能?如果是這樣的話,我完全不理解你可能期望如何在沒有它的情況下構建... – unwind