java调用c语言的so文件,JAVAµ÷ÓÃCÓïÑÔдµÄSOÎļþ

¡¡¡¡ÒòΪ¹¤×÷ÐèҪдһ·ÝSOÎļþ£¬×÷ΪÊÖ»úÓ²¼þIC¶Á¿¨ºÍAPK½»»¥µÄÇÅÁº£¬Ò²ÊÇÖмä¼þ£¬¿´ÁËÍøÉÏÓÐ˵µ½JNI½Ó¿Ú¼¼ÊõʵÏÖ£¬ÕâÀïתÔØÁËÒ»¸öʵÀý

1 // ÓÃJNIʵÏÖ

2 // ʵÀý£º

3

4 // ´´½¨HelloWorld.java

5 class HelloWorld

6 {

7     private native void print();

8     public static void main(String[] args)

9     {

10         new HelloWorld().print();

11     }

12

13     static

14     {

15         System.loadLibrary("HelloWorld");

16     }

17 }

18 // ×¢Òâprint·½·¨µÄÉùÃ÷£¬¹Ø¼ü×Önative±íÃ÷¸Ã·½·¨ÊÇÒ»¸öÔ­Éú´úÂëʵÏֵġ£ÁíÍâ×¢Òâstatic´úÂë¶ÎµÄSystem.loadLibraryµ÷Óã¬Õâ¶Î´úÂë±íʾÔÚ³ÌÐò¼ÓÔصÄʱºò£¬×Ô¶¯¼ÓÔØlibHelloWorld.so¿â¡£

19 // ±àÒëHelloWorld.java

20 // ÔÚÃüÁîÐÐÖÐÔËÐÐÈçÏÂÃüÁ

21 javac HelloWorld.java

22 // ÔÚµ±Ç°Îļþ¼Ð±àÒëÉú³ÉHelloWorld.class¡£

23 // Éú³ÉHelloWorld.h

24 // ÔÚÃüÁîÐÐÖÐÔËÐÐÈçÏÂÃüÁ

25 javah -jni HelloWorld

26 // ÔÚµ±Ç°Îļþ¼ÐÖлáÉú³ÉHelloWorld.h¡£´ò¿ªHelloWorld.h½«»á·¢ÏÖÈçÏ´úÂ룺

27 /* DO NOT EDIT THIS FILE - it is machine generated */

28 #include

29 /* Header for class HelloWorld */

30

31 #ifndef _Included_HelloWorld

32 #define _Included_HelloWorld

33 #ifdef __cplusplus

34 extern "C" {

35 #endif

36 /*

37  * Class:     HelloWorld

38  * Method:    print

39  * Signature: ()V

40  */

41 JNIEXPORT void JNICALL Java_HelloWorld_print

42 (JNIEnv *£¬ jobject);

43

44 #ifdef __cplusplus

45 }

46 #endif

47 #endif

48 // ¸ÃÎļþÖаüº¬ÁËÒ»¸öº¯ÊýJava_HelloWorld_printµÄÉùÃ÷¡£ÕâÀïÃæ°üº¬Á½¸ö²ÎÊý£¬·Ç³£ÖØÒª£¬ºóÃ潲ʵÏÖµÄʱºò»á½²µ½¡£

49 // ʵÏÖHelloWorld.c

50 // ´´½¨HelloWorld.cÎļþÊäÈëÈçϵĴúÂ룺

51 #include

52 #include

53 #include "HelloWorld.h"

54

55 JNIEXPORT void JNICALL

56 Java_HelloWorld_print(JNIEnv *env£¬ jobject obj)

57 {

58     printf("Hello World!

");

59 }

60 // ×¢Òâ±ØÐëÒª°üº¬jni.hÍ·Îļþ£¬¸ÃÎļþÖж¨ÒåÁËJNIÓõ½µÄ¸÷ÖÖÀàÐÍ£¬ºê¶¨ÒåµÈ¡£

61 // ÁíÍâÐèҪעÒâJava_HelloWorld_printµÄÁ½¸ö²ÎÊý£¬±¾Àý±È½Ï¼òµ¥£¬²»ÐèÒªÓõ½ÕâÁ½¸ö²ÎÊý¡£µ«ÊÇÕâÁ½¸ö²ÎÊýÔÚJNIÖзdz£ÖØÒª¡£

62 // env´ú±íjavaÐéÄâ»ú»·¾³£¬Java´«¹ýÀ´µÄ²ÎÊýºÍcÓкܴóµÄ²»Í¬£¬ÐèÒªµ÷ÓÃJVMÌṩµÄ½Ó¿ÚÀ´×ª»»³ÉCÀàÐ͵ģ¬ÊÇͨ¹ýµ÷ÓÃenv·½·¨À´Íê³Éת»»µÄ¡£

63 // obj´ú±íµ÷ÓõĶÔÏó£¬Ï൱ÓÚc++µÄthis¡£µ±cº¯ÊýÐèÒª¸Ä±äµ÷ÓöÔÏó³ÉÔ±±äÁ¿Ê±£¬¿ÉÒÔͨ¹ý²Ù×÷Õâ¸ö¶ÔÏóÀ´Íê³É¡£

64 // ±àÒëÉú³ÉlibHelloWorld.so

65 // ÔÚLinuxÏÂÖ´ÐÐÈçÏÂÃüÁîÀ´Íê³É±àÒ빤×÷£º

66 cc -I/usr/lib/jvm/java-6-sun/include/linux/

67 -I/usr/lib/jvm/java-6-sun/include/

68 -fPIC -shared -o libHelloWorld.so HelloWorld.c

69 // ÔÚµ±Ç°Ä¿Â¼Éú³ÉlibHelloWorld.so¡£×¢ÒâÒ»¶¨ÐèÒª°üº¬JavaµÄincludeĿ¼£¨Çë¸ù¾Ý×Ô¼ºÏµÍ³»·¾³É趨£©£¬ÒòΪHelloworld.cÖаüº¬ÁËjni.h¡£

70 // ÁíÍâÒ»¸öÖµµÃ×¢ÒâµÄÊÇÔÚHelloWorld.javaÖÐÎÒÃÇLoadLibrary·½·¨¼ÓÔصÄÊÇ“HelloWorld”£¬¿ÉÎÒÃÇÉú³ÉµÄLibraryÈ´ÊÇlibHelloWorld¡£ÕâÊÇLinuxµÄÁ´½Ó¹æ¶¨µÄ£¬Ò»¸ö¿âµÄ±ØÐëÒªÊÇ£ºlib+¿âÃû+.so¡£Á´½ÓµÄʱºòÖ»ÐèÒªÌṩ¿âÃû¿ÉÒÔÁË¡£

71 // ÔËÐÐJava³ÌÐòHelloWorld

72 // ´ó¹¦¸æ³ÉºóÒ»²½£¬Ñé֤ǰÃæµÄ³É¹ûµÄʱ¿Ìµ½ÁË£º

73 java HelloWorld

74 // Èç¹ûÄãÕâ²½·¢ÉúÎÊÌ⣬Èç¹ûÕâ²½ÄãÊÕµ½java.lang.UnsatisfiedLinkErrorÒì³££¬¿ÉÒÔͨ¹ýÈçÏ·½Ê½Ö¸Ã÷¹²Ïí¿âµÄ·¾¶£º

75 java -Djava.library.path='.' HelloWorld

76 // µ±È»»¹ÓÐÆäËûµÄ·½Ê½¿ÉÒÔÖ¸Ã÷·¾¶Çë²Î¿¼¡¶ÔÚLinuxƽ̨ÏÂʹÓÃJNI¡·¡£

77 // ÎÒÃÇ¿ÉÒÔ¿´µ½¾ÃÎ¥µÄ“Hello world!”Êä³öÁË¡£

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值