c/c++语言开发共享#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。 我在实际代码中尝试了这个并且我的代码中止了,因为在pragma部分中没有调用函数,因为它被忽略了。

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

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

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

    还有一个相应的destructor属性。

    显然, #pragma init#pragma fini仅受GCC for Solaris支持:

    相反,使用C ++:

    需要了解更多c/c++开发分享#pragma init和#pragma fini在linux上使用gcc编译器,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      // init.cpp  namespace //匿名命名空间  {       class autoinit       {          上市:               ~autoinit(){/ *破坏代码,如果适用* /}          私人的:               autoinit(){/ * myinit的内容* /}               static autoinit _instance;       };        autoinit        autoinit :: _实例;  //静态实例强制静态构造  } 

      以上就是c/c++开发分享#pragma init和#pragma fini在linux上使用gcc编译器相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979043.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐