gpt4 book ai didi

c - #pragma init 和 #pragma fini 在 linux 上使用 gcc 编译器

转载 作者:太空狗 更新时间:2023-10-29 16:43:48 30 4
gpt4 key购买 nike

我想构建一些代码,在加载共享库时调用一些代码。我以为我会这样做:

#pragma init(my_init)

static void my_init () {
//do-something
}

int add (int a,int b) {
return a+b;
}

所以当我构建代码时

gcc -fPIC -g -c -Wall tt.c

返回

gcc -fPIC -g -c -Wall tt.c 
tt.c:2: warning: ignoring #pragma init
tt.c:4: warning: ‘my_init’ defined but not used

所以它忽略了我的#pragmas。我在实际代码中尝试了这个,但我的代码中止了,因为在 pragma 部分中没有调用一个函数,因为它被忽略了。

如何让 gcc 使用这些#pragma init 和 fini 语句?

最佳答案

编译指示几乎都是特定于编译器的。 GCC 没有实现 init,但是您可以使用 constructor 函数属性获得相同的效果:

static __attribute__((constructor)) void my_init()
{
//do-something
}

还有一个相应的destructor属性。

关于c - #pragma init 和 #pragma fini 在 linux 上使用 gcc 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2459859/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com