首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不满意的链路错误

不满意的链路错误
EN

Stack Overflow用户
提问于 2010-01-27 16:46:59
回答 3查看 3.4K关注 0票数 0

我得到了以下错误。请告诉我可能出错的地方。

线程"main“java.lang.UnsatisfiedLinkError中的异常: Plcio.open(Ljava/lang/String;)I at Plcio.open(原生方法) at Plcio.main(Plcio.java:11)

我确信库在指定的路径中。

Plcio.java

代码语言:javascript
复制
public class Plcio {
 private native int open(String plcName);
 static {
  //System.loadLibrary("test");
  System.load("/home/usr/plcioExampleslib/libtest.so");
 }


 public static void main(String[] args) {
  Plcio plcio = new Plcio();
  int result = plcio.open("virtual");
  System.out.println("result = " + result);
 }
}

Plc.h

代码语言:javascript
复制
#ifndef _PLC_H
#define _PLC_H

#include<iostream>
#include<string>
#include<vector>
#include<plc.h>
#include<jni.h>

typedef PLC* plcPointer;

class Plc{

public:
 Plc() { }
 Plc(const std::string &plctype, const std::vector<int> &data):_plctype(plctype),_data(data) {}

 JNIEXPORT jint JNICALL Java_Plcio_open (JNIEnv *env, jobject jobj, jstring name) ;

private:
 plcPointer _ptr;
 const std::string _plctype;
 std::vector<int> _data;
};


#endif

Plc.cpp

代码语言:javascript
复制
#include "Plc.h"
#include <jni.h>

using namespace std;

JNIEXPORT jint JNICALL  Plc::Java_Plcio_open (JNIEnv *env, jobject jobj, jstring name) {

  const char *plcname = (env)->GetStringUTFChars(name, 0);
  _ptr = plc_open(const_cast<char*>(plcname));
  env->ReleaseStringUTFChars(name, plcname);

  if(_ptr == NULL) {
    plc_print_error(_ptr, "plc_open\n");
    return -1;
  } else 
      cout << " open successfully " << endl; 
  return 0;    
}

致以敬意,

-H

EN

回答 3

Stack Overflow用户

发布于 2010-02-04 09:53:58

据我所知,您不能将C++实例函数用作JNI函数。运行时没有对C++类实例的引用。

您可以尝试将Plc::Java_Plcio_open声明为static,这应该有效(当然,也会带来一些影响)。

票数 3
EN

Stack Overflow用户

发布于 2011-08-25 23:16:32

对不起,你做得很不对。请在JNI上查一段或几个例子。

您应该使用本机方法在类上运行javah。这将生成一个带有函数声明的C/C++头文件。这是Java_package_name_classname_funcname表格的签名。生成头文件,然后确保您的函数签名完全相同。

票数 1
EN

Stack Overflow用户

发布于 2010-03-03 12:55:58

首先,您可能还没有实现所有的头函数。

执行以下操作

1-浏览到.so目录2-做:

代码语言:javascript
复制
$ ld libteste.so

并检查是否有任何未实现的函数:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2148678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档