#pragma init 和 #pragma fini 在 Linux 上使用 gcc 编译器
我想构建一些代码,在加载共享库时调用一些代码。我想我会这样做:
#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。我在实际代码中尝试了这一点,但我的代码中止了,因为在编译指示部分中没有调用函数,因为它被忽略了。
我如何让 gcc 使用这些 #pragma init 和 fini 语句?
I would like to build some code which calls some code on loadup of the shared library. I thought i would do it like this:
#pragma init(my_init)
static void my_init () {
//do-something
}
int add (int a,int b) {
return a+b;
}
So when i build that code with
gcc -fPIC -g -c -Wall tt.c
It returns
gcc -fPIC -g -c -Wall tt.c
tt.c:2: warning: ignoring #pragma init
tt.c:4: warning: ‘my_init’ defined but not used
So its ignoring my #pragmas. I tried this in real code and my code aborted because a function hadn't been called in the pragma section because it was ignored.
How do i get gcc to use these #pragma init and fini statements?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
编译指示几乎都是特定于编译器的。 GCC 没有实现
init
,但您可以使用constructor
函数属性获得相同的效果:还有一个相应的
destructor
属性。pragmas are almost all compiler-specific. GCC doesn't implement
init
, but you can get the same effect using theconstructor
function attribute:There's also a corresponding
destructor
attribute.显然
#pragma init
和#pragma fini
仅受 Solaris 的 GCC 支持:Apparently
#pragma init
and#pragma fini
are only supported by GCC for Solaris:相反,使用 C++:
Instead, use C++: