用C如何编写给java使用的动态库

//1:编写[CallC.java],用于生成C头文件,C包含此头文件编写方法

 1 //CallC.java
 2     public class CallC
 3     {
 4         static
 5         {
 6             System.loadLibrary("useC");  //注册库文件名、C生成的库文件在windows下为useC.dll linux下生成为libuseC.so
 7          }
 8         //声明的本地方法,可以写多个
 9         public  staitc native int useC(int flag,String path,String action);
10
11     }

//2:执行[javac CallC.java] ,生成CallC.class

//3:执行[javah -classpath . CallC] 生成CallC.h ,制定classpath为当前路径

//4:编写[CallC.cpp]  拷贝jin.h和jin_md.h到代码目录 修改CallC.h 里面头文件, 如果系统有这些头文件则不需处理

 1 //CallC.cpp
 2 #include "CallC.h"
 3
 4 #include <stdio.h>
 5 #include <stdlib.h>
 6
 7 JNIEXPORT jint JNICALL Java_CallC_useC
 8   (JNIEnv * env , jclass arg, jint jmethods , jstring jname, jstring jparam)
 9 {
10     unsigned char *name = NULL;
11     unsigned char *param = NULL;
12     int methods = jmethods;
13     char cmd_buf[256] = {0};14     int nRet = 0 ;
15
16     if(jparam)
17     {
18         name =  (unsigned char *)env->GetStringUTFChars( jname, JNI_FALSE );
19     }
20     if(jparam)
21     {
22         param = (unsigned char *)env->GetStringUTFChars( jparam, JNI_FALSE );
23     }
24
25      printf("name = %s\n",name);
26    printf("param = %s\n",param);
27    printf("methods = %d\n" , methods);
28
29
30
31     switch(jmethods)
32     {
33         case 1:
34             {
35                 sprintf(cmd_buf,"%s %s" ,name ,  param);
36                 printf("%s\n" , cmd_buf);
37                 system(cmd_buf);
38                 break;
39             }
40         default :
41             {
42                 nRet = 1;
43                 break;
44             }
45     }
46
47
48
49      // 通知虚拟机本地代码不再需要通过 str 访问 Java 字符串。
50   env->ReleaseStringUTFChars( jname, (const char *)name );
51   env->ReleaseStringUTFChars( jparam, (const char *)param );
52     return 0;
53
54 }

//5:执行[g++ -Wl,--kill-at -shared -fPIC -o  useC.dll CallC.cpp] 编译代码,生成useC.dll

//6:编写[UseC.java]测试代码

1 public class UseC
2 {
3     public static void main(String argv[])
4     {
5           int result = CallC.useC(1 , "dir" , "/a:-d");
6           System.out.print(result);
7     }
8 }

//7:执行[javac -cp . UseC.java]编译java测试源码

//8:执行[java -Djava_library.path=. -cp . UseC]运行java程序测试动态库

//参考资料

windows下安装gcc编译环境  http://tieba.baidu.com/p/2826016538

linux下 java JNI调用C语言动态链接库 - JonnyWei的专  http://blog.csdn.net/xiaojianpitt/article/details/5652223

java.lang.UnsatisfiedLinkError解决方法汇集    http://blog.csdn.net/niuxinlong/article/details/4176612

用C如何编写给java使用的动态库

时间: 2024-10-13 06:26:05

用C如何编写给java使用的动态库的相关文章

Java 加载动态库 dll 文件

不知道具体原理,但是,加载 dll 文件时,带路径或者更改 dll 文件的名字,都会报错.虽然库记载成功了,但是处女座认为这不可接受.于是有了这个解决方案. 在根目录为库创建软连接,然后使用 system.loadLibrary(“libname”) 来加载.事实证明,它时认软连接的. 上代码: import com.seapine.surroundscm.api.*; import java.lang.UnsupportedOperationException; import java.lan

JAVA基础-输入输出:1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。

1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上. package Test03; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOExceptio

Java基础-接口中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,

36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产.请编写一个java应用程序描述上述的体制现象. 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,该抽象类中有个“安 全生产”的抽象方法:abstract void safetyInProduction() (

java基础,继承类题目:编写一个Java应用程序,该程序包括3个类:Monkey类、People类和主类 E

21.编写一个Java应用程序,该程序包括3个类:Monkey类.People类和主类 E.要求: (1) Monkey类中有个构造方法:Monkey (String s),并且有个public void speak() 方法,在speak方法中输出“咿咿呀呀......”的信息. (2)People类是Monkey类的子类,在People类中重写方法speak(),在speak方法 中输出“小样的,不错嘛!会说话了!”的信息. (3)在People类中新增方法void think(),在thi

07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao

 1  创建day14数据库,创建user.sql表: A 创建数据库 day14 B 创建数据表 users create table users ( id int primary keyauto_increment, username varchar(20), password varchar(20) ); 2  添加依赖的jar包 c3p0-0.9.1.2.jar mysql-connection-java-5.0.8-bin.jar commons-beanutils-1.8.0.j

编写无Java脚本的JSP页面

在上一章中总结了Web开发中应用MVC架构模式,将Servlet 用做控制器,JSP作为视图,JavaBean作为模型,实现业务流程控制,页面逻辑和业务逻辑的分离.然而,使用前面的技术实现MVC,并不是最完美的. 在当代的一个最佳的JavaWeb开发实践就是在MVC架构模式中,中和使用JavaBean,EL(expression language),JSP自定义标记库以及JSP标准标记库JSTL,编写无java脚本的JSP页面. 一 JSP表达式语言EL 在使用基于MVC架构模式的Web应用开发

用Eclipse编写运行Java程序

1.选择一个空的文件夹,作为workspace工作空间,用来存放你以后用eclipse写的Java程序. 2.新建java项目:File->new->java project 3.完成创建后,在src上单击鼠标右键 new->class 4.这时候就可以在主窗体编写代码了 5.按run  as   java  application,即可运行. 用Eclipse编写运行Java程序,布布扣,bubuko.com

Java基础-输入输出-2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt

2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt package Test03; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import jav

Java基础-输入输出-3.编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc。

3.编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc. try { FileInputStream in = new FileInputStream("e:/TextRw.txt"); FileOutputStream out = new FileOutputStream("e:/2012412440张伟.txt"); int i =0; byte[] b1 = new by