www.g22.com - 太阳城娱乐官方网站

搜索: 您的位置首页 > 在线留言

JNI源码分析(并实现JNI动态注册

时间:2018-09-11 17:56:16  来源:本站  作者:

  近日,职场社交平台脉脉上有人发贴称,证实腾讯王者荣耀团队今年年终奖每人将发100个月工资,然后有腾讯员工在下面留言说:“也不全是啦,我就是120个月工资。”一时间引起轩然大波。要知道,人的一生如果按40年的工龄来算,总共也就只能领480个月的工资,而腾讯一下子就发了120个月的,怎能不让人眼红?但是至于这则消息的真实性到底如何呢?腾讯的官微进行了辟谣,说现在离年终还早着呢,怎么可能现在就确定年终奖了。不过,我也有托内部的员工打听了一下这个消息的真实性,对方回答消息确实是真的。想想也对,王者荣耀今年帮助腾讯赚得是盆满钵满,区区120个月工资又算得了什么呢?

  本篇来自李樟清的投稿,分析了Java和C++语言如何通过so文件交互的,希望对大家有所帮助!

  在编译阶段只会去找b.h有没有test方法,而在链接的阶段,他会在b.o当中去找这个test方法

  如果没有test方法会 报 LinkErro 错误。而这个LinkErro错误一般是因为我们在一个文件当中引入了一个.h文件,并且使用了这个文件当中的这个方法,而这个对应的.h文件对应的.o文件(中间文件)里面没有这个方法的实现体。

  那这个so库 ,系统是怎么找到的?System.loadLibrary是怎么来找到的?并且系统是如何来区分(JVM是怎么来区分 native 方法(diff)和 javaDiff方法)

  当我们调用 javaDiff 的时候会到 Java虚拟机 的内存当中来处理找这个方法,而加了 native 关键字的时候他就会去到 C++ 的堆栈空间找这个 C++ 的实现。

  先在看声明了 native 的方法和没有声明 native 方法之间的区别。

  System.java 看注释可以看出 ,是根据你的平台来找你的 so库

  每个 class 都需要使用 javah 生成一个头文件,并且生成的名字很长书写不便;初次调用时需要依据名字搜索对应的JNI层函数来建立关联关系,会影响运行效率。用 javah 生成头文件方便简单

  初次调用的使用,需要依据名字搜索对应的 FindSymbol(具体看 Runctime.c)

  移植方便,便于维护(一个java文件中有多个native方法,只要修改下gMethods 的映射关系)

相关文章列表
    无相关信息
推荐资讯
栏目更新
热点排行