extern void MyInitFunc(void) __attribute__ ((constructor));
extern void MyTermFunc(void) __attribute__ ((destructor));
void MyInitFunc(void)
{
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");
}
void MyTermFunc(void)
{
}
我把它放在主应用程序(不是库或框架)中的 .c 文件中。它不会根据 GCC 文档被调用。我错过了什么重要的东西吗?这是在 Snow Leopard 上的 XCode 3.2 上。
最佳答案
这或许可以解释 Snow Leopard 上报告的一些奇怪错误,但前提是此构造在早期版本中有效。
你是对的,MyInitFunc
应该纯粹是作为与程序链接的结果被调用,即使程序是普通的 C89,即使它的其余部分完全是其他语言.
问题是您系统上的 C 启动代码没有查看 .ctors
部分和 .dtors
部分以获取构造函数和析构函数的地址。我不确定这是否适用于所有平台,但通常这是 __do_global_ctors
,libgcc
的一部分。
这是一个平台错误,或者,您的 gcc 构建错误,或者,Apple 只是决定以不同的方式做事,而 gcc 不正确支持该平台。
您可以尝试 cc -v ...
并检查是否正在调用 collect2
而不是直接调用 ld
。
关于c - 如何让 GCC __attribute__ ((constructor)) 在 OSX 下工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1526882/