当前位置: 首页 > 知识库问答 >
问题:

本机方法链接错误

商棋
2023-03-14
               nativetest.java
         public class nativetest
         {
            static {
              System.loadLibrary("nativetest");
            }
            public native String sayHello(String s);
            public static void main(String[] argv)
            {
                 String retval = null;
                 nativetest nt = new nativetest();
                 retval = nt.sayHello("Beavis");
                 System.out.println("Invocation returned " + retval);
            }

         }

已成功创建nativetest.h文件

                  nativetest.h
          /* DO NOT EDIT THIS FILE - it is machine generated */
          #include <jni.h>
          /* Header for class nativetest */

          #ifndef _Included_nativetest
          #define _Included_nativetest
          #ifdef __cplusplus
          extern "C" {
          #endif
          /*
           * Class:     nativetest
           * Method:    sayHello
           * Signature: (Ljava/lang/String;)Ljava/lang/String;
          */
          JNIEXPORT jstring JNICALL Java_nativetest_sayHello(JNIEnv *, jobject, jstring);

          #ifdef __cplusplus
          }
          #endif
     #endif

NativeTest.c代码

                          nativetest.c 
          include "nativetest.h"    /*double quotes tells it to search current directory*/

          JNIEXPORT jstring JNICALL Java_nativetest_sayHello (JNIEnv *env, jobject thisobject, jstring js)

          {
               return js;
          }

gcc-I/usr/java/jdk1.7.0_13/include-I/usr/java/jdk1.7.0_13/include/linux-o nativetest.so-shared nativetest.c

已成功创建共享对象文件。

当我执行nativetest时,它显示了以下错误

java-djava.library.path=。nativetest
线程“main”java.lang.unsatifiedLinkError:在java.lang.classloader.loadLibrary(classloader.java:1860)
在java.lang.runtime.loadLibrary0(runtime.java:845)
在java.lang.system.loadLibrary(system.java:1084)
在nativetest(nativetest.java:4)
在java.lang.system.loadLibrary

Thanx提前....

共有1个答案

喻元龙
2023-03-14

在Linux上,共享库的文件名应该以“lib”开头,即“lib[library_name].so”。

参考:3.1.1.共享库名称

每个共享库都有一个特殊的名称,称为“soname”。soname的前缀是''lib''、库名、短语''.so'',后面跟着一个句点和一个版本号,这个版本号在接口更改时会递增(作为一个特殊的例外,最低级别的C库不以''lib''开头)。一个完全限定的soname包括它所在的目录作为前缀;在一个工作的系统中,一个完全限定的soname只是一个指向共享库“真实名称”的符号链接。

 类似资料:
  • 问题内容: 我在python中发现了这种方法链接,但是即使有了它,我也无法理解Python中的方法链接。 这里的目标是两个:解决编码问题并理解方法链接(假设我对可调用对象仍然不是100%自信)。 到问题定义。 我想要一个具有两种方法的类:一种设置对象的参数=“ line”,另一种覆盖“ bar”。 这是我到目前为止所得到的: 不幸的是,用这段代码我可以实现我的目标 但是我想通过编写这段代码获得相同

  • 我正在尝试使用graalVM v20.0.0CE创建一个简单的hello world本地映像。 最初,我收到了一个“本机工具链”错误,但从“x86 Native Tools Command Prompt for VS2017”启动了一个命令行,我就克服了这个障碍。 现在的问题是一串链接器错误: java.lib(jni_util.obj):错误LNK2019:函数jni _打印字符串中引用了未解析

  • 这些是我的系统规格 > Windows 64bit Java 11 64位

  • 考虑以下头文件和源文件: 我在

  • 问题内容: 我正在使用PHP 5,并且听说过面向对象方法中的一项新功能,即“方法链接”。究竟是什么?如何实施? 问题答案: 实际上,它相当简单,您有一系列的mutator方法,它们都返回原始(或其他)对象,这样您就可以继续在返回的对象上调用方法。 输出“ ab” 在线尝试!

  • 问题内容: 我对方法感到惊讶。有一天,我写了一个函数,该函数应该返回Optional: 我错误地认为这会阻止参数表达的任何内部。 现在我想我知道这是非常愚蠢的想法。Java必须先解析参数才能将其传递给调用。 但是我有一个问题。有没有一种很好的方法可以实现我的目标?我想从表达式中获取一些Integer值或null。Null可以是每个表达式之一:或。 我知道我可以将其放在try / catch块中,但