java调c
来源:互联网 发布:gps航迹编辑软件 编辑:程序博客网 时间:2024/06/11 01:36
在文章最后说明了eclipse生成的class文件和linux平台下class文件不一致。
1. Java –version
实验环境是java version "1.8.0_121",jdk版本不一样,jni.h的定义不一样,接口不一样,可能会不兼容,因此尽量include文件拷走
2. Echo $JAVA_HOME echo$PATH
3. 写一个java与c的接口类,文件名为JavaToTest.java
publicclass JavaToCSend
{
public JavaToCSend()
{ super();}
static
{ try
{
//此处即为本地方法所在链接库名
System.loadLibrary("dandao");
}
catch(UnsatisfiedLinkError e)
{
System.err.println( "Cannot load clibrary:\n " +e.toString() );
}
}
//声明的本地方法,使用c实现的方法
public native String stringMethod(Stringtext);
//可在其他类中调用
public static void main(String[] args)
{
JavaToCSend sample = new JavaToCSend();
String text = sample.stringMethod("Thinking InJava");
System.out.println("stringMethod:" + text);
}
}
4. Javac JavaToCSend.java
为了生成JavaToCSend,然后用javah生成JavaToCSend.cpp文件所需要的JavaToCSend.h头文件。
1. / $JAVA_HOME/bin/javah JavaToCSend或者javah -jni JavaToCSend
生成JavaToCSend.h
2. 写一个cpp文件,命名为JavaToCSend.cpp
#include"JavaToCSend.h"
#include<stdio.h>
#include<string.h>
JNIEXPORT jstring JNICALL Java_JavaToCSend_stringMethod
(JNIEnv * env, jobject arg, jstring instring)
{
//从 instring字符串取得指向字符串UTF编码的指针
const char* szStr = env->GetStringUTFChars(instring, JNI_FALSE );
printf( "String = [%s]/n", szStr);
env->ReleaseStringUTFChars(instring, szStr);
return instring;
}
5. gcc -Wall -fPIC -I./include -I./include/linux -shared -olibdandao.so JavaToCSend.cpp
因此每次需要拷走include文件,为了兼容jni等头文件,成功后会生成动态链接库libdandao.so
3. exportLD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
4. java -cp . JavaToCSend
备注:
工程中遇到问题,eclipse生成的class文件和linux下javac生成的class文件不一样,eclipse下的class不支持javah,因此将所有的jar包,java源文件拷贝至linux平台下,编译。
解决流程如下:
Consumer
建立lib目录,保存jar包文件
javac -cp .:lib/* *.java
javah -jni JavaToCSend
生成JavaToCSend.h
修改JavaToCSend.cpp
g++ -Wall -fPIC -shared -I./include-I./include/linux -L. -o libdandao.so JavaToCSend.cpp –lsft
成功后会生成动态链接库libdandao.so
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
java -cp .:lib/* DataCconsumerconf.properties
java -cp .:lib/* KafkaConsumerMainconsumerconf.properties
producer
建立lib目录,保存jar包文件
javac -cp .:lib/* *.java
javah -jni JavaToCRecv
生成JavaToCRecv.h
修改JavaToCRecv.cpp
g++ -Wall -fPIC -shared -I./include-I./include/linux -L. -o libdandao.so JavaToCRecv.cpp –lsft
成功后会生成动态链接库libdandao.so
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
java -cp .:lib/* JavaToCRecv producerconf.properties
- java 调 pro*c
- java调c
- ndk c调java
- 简单的java调C
- C/C++,C#,Java区别
- C/C++,C#,JAVA数组
- C/C++/C#/Java/Python
- objective c, c, c++, java
- C语言,C++,JAVA
- C#,C++,Java比较
- c#,C++,Java比较
- Java, C, 还是C++?
- c/c++/java/python
- C、C++、java分析
- C、C++、Java回顾
- c/c++/java
- c/c++/java区别
- C、C++、JAVA比较
- 大数据量下MySQL插入方法的性能比较
- java内部类详解
- 表索引的操作
- SiteMesh
- ionic2+angular2中踩的那些坑
- java调c
- Set和List的区别
- sql 视图创建
- SQL Server存储过程实例
- 安卓MVP学习感悟
- 3. 登录服务器 login 和热更新
- 一个简单的网页系统Tour(终结) 和效果展示图
- redis的事务(transaction)详解
- Linux ps aux指令詳解