Compilation 在共享库中调用内部函数

Compilation 在共享库中调用内部函数,compilation,shared-libraries,elf,glibc,dynamic-linking,Compilation,Shared Libraries,Elf,Glibc,Dynamic Linking,我想调用glibc中的未报告的函数。确切地说,我想调用ptmalloc\u init()。问题是符号未导出。我可以访问glibc源代码。因此,我在glibc源代码中添加了一个名为ptmalloc\u init\u caller()的函数,并编译了库。但是,在nm-D输出中,我同样看不到任何东西,因此,我可以不从外部调用添加的函数。构建glibc有什么特别的地方被省略了吗?您需要使ptmalloc_init功能非静态并将其添加到malloc/Versions中,例如在glibc_PRIVATE部分

我想调用
glibc
中的未报告的函数。确切地说,我想调用
ptmalloc\u init()
。问题是符号未导出。我可以访问
glibc
源代码。因此,我在
glibc
源代码中添加了一个名为
ptmalloc\u init\u caller()的函数,并编译了库。但是,在
nm-D
输出中,我同样看不到任何东西,因此,我可以从外部调用添加的函数。构建
glibc
有什么特别的地方被省略了吗?

您需要使
ptmalloc_init
功能非静态
并将其添加到
malloc/Versions
中,例如在
glibc_PRIVATE
部分下。然后将其导出。如果不更改为
malloc/Versions
,则生成的版本脚本中将不会提及该函数(请参见构建树中的
libc.map
),其符号将具有隐藏的可见性