未能获得方法的地址



BridJ找不到共享库的方法。我需要你帮我弄明白为什么。

该库是由JNAerator生成的。

mn -g of lib.so:

         w _Jv_RegisterClasses
         U _Unwind_Resume@@GDeleteClass().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方法。

为什么?

这个错误信息意味着在你的头文件中声明了一个方法,但没有在你的库中实现。验证CC_3实际上是在JNAerator引用的库中实现的。

相关内容

  • 没有找到相关文章

最新更新