JNI(Java 和 C++)在 Ubuntu 11.10 上使用 Eclipse
JNI (Java and C++) Using Eclipse on Ubuntu 11.10
嗨,我是 JNI
的新手,只是想让一个简单的 JNI 示例使用 Eclipse 工作。 我按照以下教程中的步骤操作:http://codeandme.blogspot.com/2011/09/jni-made-easy.html 我的 Java 代码如下所示:
public class Main
{
private native int getDouble(int n);
public static void main(String[] args)
{
System.load("/home/ryan/Desktop/libJNILibrary3.so");
Main m = new Main();
System.out.println(m.getDouble(3));
}
}
然后,我使用 jdk1.7.0_11/bin 中包含的 javah 工具来生成一个头文件。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Main */
#ifndef _Included_Main
#define _Included_Main
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Main
* Method: getDouble
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_Main_getDouble
(JNIEnv *, jobject, jint);
#ifdef __cplusplus
}
#endif
#endif
然后,我在 eclipse 中创建了一个C++项目,并创建了一个 Main.cpp 源文件。 我将 Main.h 文件放在与 Main.cpp 相同的文件夹中。 Main.cpp 的代码如下:
#include "Main.h"
JNIEXPORT jint JNICALL Java_Main_getDouble
(JNIEnv *env, jobject obj, jint n)
{
return n*2;
}
然后,我按照教程中的说明配置项目生成设置。 当我构建项目时,它创建了".so"文件"libJNILibrary3.so"。 然后我运行了我的 Java 类"Main"并收到以下错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Main.getDouble(I)I
at Main.getDouble(Native Method)
at Main.main(Main.java:9)
奇怪的是,如果我重做这个例子,并使 getDouble 方法不带参数,而只返回值 2,那么一切都按应有的方式工作。 让该方法接受参数在某种程度上搞砸了一切。 我在此错误上花费了十多个小时,并搜索了许多论坛,但没有找到解决此问题的方法。 任何帮助将不胜感激。谢谢!
您将函数的主体放在 cpp 文件中,JNI 回调必须遵循 C 样式名称重整。
在您的 cpp 文件中尝试此操作:
extern "C"
{
JNIEXPORT jint JNICALL Java_Main_getDouble
(JNIEnv *env, jobject obj, jint n)
{
return n*2;
}
}
相关文章:
- 无法在Ubuntu上将共享库与Eclipse链接
- 在Ubuntu上使用Eclipse使用CGAL库16.04
- 在Ubuntu上使用Eclipse时,将新的第三方库与C 程序联系起来
- 为什么Ubuntu c++中的eclipse不能打印出数据
- 如何使用 Eclipse ubuntu 设置 SDL2
- 查看 Eclipse - Ubuntu 环境中的源代码C++
- 如何在Ubuntu 16.04中安装Eclipse C IDE
- 在Eclipse(Ubuntu)创建C Makefile项目时,如何生成.bin(可执行文件)
- 如何在 ubuntu 上设置 Eclipse + StatET + Rcpp
- Eclipse Ubuntu 中的“程序不是可识别的可执行文件”错误
- G++ 错误,无法识别的选项,--Subsystem Console"在 Ubuntu 中的 Eclipse 中
- 将 OpenCV 库与 Eclipse Ubuntu 链接起来
- 在 Eclipse 中调试 Ubuntu 上的C++项目不会在断点处停止
- 如何在Ubuntu上使用Eclipse编译C++11
- 创建独立的可执行 c++ 嵌入 Lua 动态库链接?(Eclipse,Ubuntu)
- eclipse 4.2 cdt with ubuntu 12.04 configuration
- Ubuntu 14.04上的Eclipse出现异常错误
- 无法解决的功能'srand'?(我正在使用 Ubuntu OS 和 Eclipse)
- Pretty Printers在Eclipse Ubuntu 14中执行Python代码时出错
- 在eclipse ubuntu上构建opencv项目失败