在 Linux 下,我可以注册一个将在 main 之前运行的例程。例如:
#include <stdio.h>
void myinit(int argc, char **argv, char **envp) {
printf("%s: %s\n", __FILE__, __FUNCTION__);
}
__attribute__((section(".init_array"))) typeof(myinit) *__init = myinit;
Run Code Online (Sandbox Code Playgroud)
通过使用 GCC 编译并链接它,函数myinit将在 main 之前运行。
有没有办法在 Mac OSX 和 MACH-O 下做到这一点?
谢谢。
您可以将该函数放在__mod_init_funcMach-O 二进制文件的数据部分。
__DATA,__mod_init_func
模块初始化函数。C++ 编译器在此处放置静态构造函数。
例子.c
#include <stdio.h>
void myinit(int argc, char **argv, char **envp) {
printf("%s: %s\n", __FILE__, __FUNCTION__);
}
__attribute__((section("__DATA,__mod_init_func"))) typeof(myinit) *__init = myinit;
int main() {
printf("%s: %s\n", __FILE__, __FUNCTION__);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我clang在 OS X 平台上构建您的示例:
$ clang -Wall example.c
$ ./a.out
example.c: myinit
example.c: main
Run Code Online (Sandbox Code Playgroud)