我想调用的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**
这是原因,因为当我从我的应用程序调用{{1}}时,它会返回func1()
,即:errno =38
我可以以某种方式将ENOSYS 38 /* Function not implemented */
绑定为GLOBAL,然后从我的应用程序中调用它吗?
答案 0 :(得分:0)
这是原因
没有。符号绑定完全是为了能够调用该函数(您可以调用GLOBAL
,而不是LOCAL
函数)并且能够覆盖定义(您可以链接多个WEAK
定义的函数到没有多重定义的链接器错误的单个可执行文件中。)
一旦你可以调用该函数,它的绑定就不在图片中了,它会返回它返回的内容。
你得到ENOSYS
的原因很可能是你的内核太旧了。