3

BridJは共有ライブラリのメソッドを見つけることができません。理由を理解するのに助けが必要です。

ライブラリはJNAeratorによって生成されました。

mn -glib.soの:

         w _Jv_RegisterClasses
         U _Unwind_Resume@@GCC_3.0
00004970 T _Z11CreateClassv
00004960 T _Z11DeleteClassPv
....

ライブラリのヘッダー:

#ifdef __cplusplus
extern "C" {
#endif;
void* CreateClass(void);
void  DeleteClass(void* hClass);
....

Javaコード:

@Runtime(CRuntime.class) 
public class MobileclientLibrary {
    static {
        BridJ.register();
    }
    public static Pointer<? > CreateClass() {
         return Pointer.pointerToAddress(CreateClass$2());
    }
    @Ptr 
    @Name("CreateClass") 
    protected native static long CreateClass$2();

    public static void DeleteClass(Pointer<? > hClass) {
        DeleteClass(Pointer.getPeer(hClass));
    }
    protected native static void DeleteClass(@Ptr long hClass);
    ...

ログでこのアプリケーションを実行する場合:

Mar 12, 2013 2:13:53 PM org.bridj.BridJ log
INFO: Failed to get address of method protected static native void Mobileclient.MobileclientLibrary.DeleteClass(long)

しかし、メソッドCreateClassは正常に見つかりました。

何故ですか?

4

1 に答える 1

0

このエラー メッセージは、ヘッダーで宣言されているがライブラリに実装されていないメソッドがあることを意味します。DeleteClass()JNAerator が参照しているライブラリに実際に実装されていることを確認します。

于 2013-03-26T15:22:35.120 に答える