1

私は初めてネイティブメソッドを試し
ています....私はこのリンクから簡単なプログラミングをました....

               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);
            }

         }

javac nativetest.java
javah -jni nativetest

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

共有オブジェクト ファイルが正常に作成されました。

ネイティブテストを実行すると、次のエラーが表示されます

java -Djava.library.path=.
スレッド「メイン」でのネイティブ テスト例外 java.lang.UnsatisfiedLinkError: java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860) の java.library.path にネイティブ テストがありませんjava.lang.Runtime.loadLibrary0
(Runtime.java:845 ) )
java.lang.System.loadLibrary(System.java:1084)
at nativetest.(nativetest.java:4)

事前にサンクス....

4

1 に答える 1

2

Linux では、共有ライブラリのファイル名は「lib」、つまり「lib[library_name].so」で始まる必要があります。

参照: 3.1.1. 共有ライブラリ名

Every shared library has a special name called the ``soname''. The soname has the prefix ``lib'', the name of the library, the phrase ``.so'', followed by a period and a version number that is incremented whenever the interface changes (as a special exception, the lowest-level C libraries don't start with ``lib''). A fully-qualified soname includes as a prefix the directory it's in; on a working system a fully-qualified soname is simply a symbolic link to the shared library's ``real name''.

于 2013-03-20T06:17:27.943 に答える