向 glibc 添加一个函数以及如何将绑定值更改为 GLOBAL?
add a function to glibc and how to change the bind value to GLOBAL?
由于某些原因,我需要在glibc中添加一个函数。我试图将示例函数添加到 pthread.so:
- 添加一个文件
glibc/nptl/my_add.c
,其中return两个数的和
- 修改
glibc/nptl/Makefile
,将my_add
添加到“libpthread-routines”
- make glibc 并且我得到 pthread.so,但是 func 的绑定值是 LOCAL。 如何将绑定值从 LOCAL 更改为 GLOBAL?
$ readelf build/nptl/pthread.so.0 -s | grep "my_add"
326: 0000000000000000 0 FILE LOCAL DEFAULT ABS my_add.c
458: 0000000000013550 4 FUNC LOCAL DEFAULT 14 __my_add
510: 0000000000013550 4 FUNC LOCAL DEFAULT 14 my_add@@GLIBC_2.2.5
我想也许我应该修改 Makefile 中的 gcc 标志,但我不知道该怎么做。 glibc 对我来说很复杂,但我不得不爱它。
请帮助我,谢谢!
my_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);
but the func's bind value is LOCAL.
这是因为 GLIBC 构建过程严格控制外部符号集(因此不会导出不需要的或仅供内部使用的符号)。
您必须将 my_add
函数添加到 nptl/Versions
文件。
由于某些原因,我需要在glibc中添加一个函数。我试图将示例函数添加到 pthread.so:
- 添加一个文件
glibc/nptl/my_add.c
,其中return两个数的和 - 修改
glibc/nptl/Makefile
,将my_add
添加到“libpthread-routines” - make glibc 并且我得到 pthread.so,但是 func 的绑定值是 LOCAL。 如何将绑定值从 LOCAL 更改为 GLOBAL?
$ readelf build/nptl/pthread.so.0 -s | grep "my_add"
326: 0000000000000000 0 FILE LOCAL DEFAULT ABS my_add.c
458: 0000000000013550 4 FUNC LOCAL DEFAULT 14 __my_add
510: 0000000000013550 4 FUNC LOCAL DEFAULT 14 my_add@@GLIBC_2.2.5
我想也许我应该修改 Makefile 中的 gcc 标志,但我不知道该怎么做。 glibc 对我来说很复杂,但我不得不爱它。
请帮助我,谢谢!
my_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);
but the func's bind value is LOCAL.
这是因为 GLIBC 构建过程严格控制外部符号集(因此不会导出不需要的或仅供内部使用的符号)。
您必须将 my_add
函数添加到 nptl/Versions
文件。