Build 向glibc添加函数,以及如何将bind值更改为GLOBAL?

Build 向glibc添加函数,以及如何将bind值更改为GLOBAL?,build,shared-libraries,glibc,Build,Shared Libraries,Glibc,出于某些原因,我需要向glibc添加一个函数。我试图向pthread.so添加一个示例函数: 添加一个文件glibc/nptl/my_add.c,该文件返回两个数字的总和 修改glibc/nptl/Makefile,将my_Add添加到“libpthread例程” 使glibc和我得到pthread.so,但是func的绑定值是本地的如何将绑定值从本地更改为全局? 我想也许我应该修改Makefile中的gcc标志,但我不知道怎么做。这个问题对我来说很复杂,但我必须解决它 请帮帮我,谢谢 我的_a

出于某些原因,我需要向glibc添加一个函数。我试图向pthread.so添加一个示例函数:

  • 添加一个文件
    glibc/nptl/my_add.c
    ,该文件返回两个数字的总和
  • 修改
    glibc/nptl/Makefile
    ,将
    my_Add
    添加到“libpthread例程”
  • 使glibc和我得到pthread.so,但是func的绑定值是本地的如何将绑定值从本地更改为全局?
  • 我想也许我应该修改Makefile中的gcc标志,但我不知道怎么做。这个问题对我来说很复杂,但我必须解决它

    请帮帮我,谢谢

    我的_add.c

    #include "pthreadP.h"
    #include <shlib-compat.h>
    
    
    int __my_add (int a, int b)
    {
        return a+b;
    }
    versioned_symbol (libpthread, __my_add, my_add, GLIBC_2_1);
    
    #包括“pthreadP.h”
    #包括
    int u我的添加(int a,int b)
    {
    返回a+b;
    }
    版本化的\u符号(libpthread、\uuuuuMy\uAdd、myuAdd、GLIBC\u2\u1);
    
    但是func的绑定值是本地的

    这是因为GLIBC构建过程严格控制外部符号集(因此不会导出不需要的符号或仅导出内部符号)


    您必须将
    my\u add
    函数添加到
    nptl/Versions
    文件中。

    非常感谢!它解决了我的问题problem@noobcjl如果一个答案对你有帮助,你应该投它一票。如果它解决了你的问题,你应该接受答案。
    #include "pthreadP.h"
    #include <shlib-compat.h>
    
    
    int __my_add (int a, int b)
    {
        return a+b;
    }
    versioned_symbol (libpthread, __my_add, my_add, GLIBC_2_1);