0

呼び出したい 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 =38ENOSYS 38 /* Function not implemented */

どうにかしてfunc1()バインディングを GLOBAL として作成し、アプリケーション プログラムから同じものを呼び出すことはできますか?

4

1 に答える 1

0

これが理由か

いいえ。シンボル バインドとは、関数を呼び出すことができること ( を呼び出すことはできますが、関数を呼び出すことはできGLOBALませんLOCAL) と、定義をオーバーライドできること (複数WEAK定義されたリンカー エラーなしで、複数の定義済み関数を単一の実行可能ファイルにリンクできること) です。

関数を呼び出すことができるようになると、そのバインディングは全体像から外れ、返されるものは何でも返されます。

あなたが得た理由ENOSYSは、カーネルが古すぎる可能性が高いです。

于 2013-01-29T15:33:10.880 に答える