Glibc 应用程序返回未实现的ENOSYS 38函数

Glibc 应用程序返回未实现的ENOSYS 38函数,glibc,elf,Glibc,Elf,我要调用的func1()具有如下绑定: readelf -Ws /lib/libc.so.6 | grep func1 592: 000d8910 40 FUNC WEAK DEFAULT 12 func1@@GLIBC_2.13 1690: 000d8910 40 FUNC WEAK DEFAULT 12 func2@@GLIBC_2.13** 这就是为什么当我从应用程序调用func1()时,它返回一个errno=38,即:ENOSY

我要调用的func1()具有如下绑定:

readelf -Ws /lib/libc.so.6 | grep  func1

    592: 000d8910    40 FUNC    WEAK   DEFAULT   12 func1@@GLIBC_2.13
   1690: 000d8910    40 FUNC    WEAK   DEFAULT   12 func2@@GLIBC_2.13**
这就是为什么当我从应用程序调用
func1()
时,它返回一个
errno=38
,即:
ENOSYS 38/*函数未实现*/

我是否可以将
func1()
绑定设为全局绑定,然后从应用程序中调用该绑定

这是原因吗

不可以。符号绑定是指能够调用函数(可以调用
全局
,但不能调用
局部
函数)以及能够覆盖定义(可以将多个
定义的函数链接到单个可执行文件中,而不会出现多定义链接器错误)

一旦可以调用该函数,它的绑定就不存在了,它将返回它返回的任何内容


您获得ENOSYS的原因很可能是您的内核太旧。

是否有办法从glibc公开函数func1(),以便其他应用程序可以使用它?同样,func1()在system.map文件中显示为,ffffffff8118e540 T sys_func1仍然是为什么我会收到ENOSYS错误?@priyamn“为什么是ENOSYS?”--无法回答。什么是
func1
?你的
System.map
与你实际运行的内核匹配吗?这实际上并没有回答这个问题。你问了一个关于glibc和符号绑定的复合问题,然后又问了另一个问题。答案是针对ENOSYS的,但对于你的大部分问题和标题,完全没有提及。我认为这太地方化了。