我尽量保持简单(即使我有一个相关的问题正在运行,但这应该更笼统。
当我声明一个extern void foo(void)
带有原型的函数并在同一个 C 文件中调用它时,我可以weak
在另一个 C 文件中赋予它属性吗?
原因是:该extern
功能foo()
是否实现取决于一些构建选项,可能会或可能不会添加到二进制文件中。如果不是,我(显然)得到一个错误undefined reference
。这就是为什么我要声明它是弱的(__attribute__((weak))
来自 GCC 或 with #pragma weak
。出于某种原因(在这里解释很长)我想在单独的 C 文件中执行此操作,而不在原始声明中添加#pragma
/ attribute
? - 有无论如何要这样做?如果我只是添加#pragma weak foo
到另一个 C-File 它不会工作。(我使用的是 GCC 4.8.1)
//编辑:根据要求一些代码:注意:实现foo
与项目无关
函数.c
extern void foo(void);
// #pragma weak foo <-- If I add it here, it links without problems
void bar(void)
{
foo();
}
弱声明.c
#pragma weak foo <-- If I add it here, I get undefined reference error
//编辑2:
好的,我会尝试更多地指定我的问题 - 有没有办法使符号foo
对链接器全局可见,并且具有weak
来自另一个 C 文件(WeakDeclaration.c
)中的属性