您的位置:首页 > 运维架构 > Linux

LINUX 下 JNA 调用 so--正确版

2014-03-16 10:14 501 查看
项目中需要用到JAVA调用c++,了解过JNI,但比较复杂,后来看到JNA(JNI的加强版)。

网上看了很多例子,但是始终出错,主要错误原因是undefined symbol,找不到c++ 方法。

教程的有些细节没说(- -||),好吧,我把成功的例子贴一下吧。

1.编写C++ so库

c++代码:注意加上extern “C”,否则无法找到c++方法。

#include <stdlib.h>
#include <iostream>
using namespace std;

extern "C"
{
void test() {
cout << "TEST" << endl;
}

int addTest(int a,int b)
{
int c = a + b ;
return c ;
}
}
编译so:g++ -fpic -shared -o libtest.so test.cpp
我把so文件放到了 /lib 下。

2.JAVA代码

import com.sun.jna.Library;
import com.sun.jna.Native;

public class jnatest1 {

// 继承Library,用于加载库文件
public interface Clibrary extends Library {
// 加载libhello.so链接库
Clibrary INSTANTCE = (Clibrary) Native.loadLibrary("hello",
Clibrary.class);

// 此方法为链接库中的方法
void test();
int addTest(int a,int b);
}

public static void main(String[] args) {
// 调用
Clibrary.INSTANTCE.test();
int c = Clibrary.INSTANTCE.addTest(10,20);
System.out.println(c);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux JNA SO C++