由包名引起的java.lang.unsatisfiedLinkError

时间:2014-08-21 15:15:33

标签: java java-native-interface package

如果我把它放在默认包中,我的程序运行良好。一旦我把它放在一个特定的包中,它就不起作用了。我得到以下错误消息:

Error Message: Exception in thread "main" java.lang.**UnsatisfiedLinkError**: 
mypackage.my_java_class_name.nativeUpload(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
  • OS:Ubuntu 12.04 32bits
  • Java版:openjdk 7

编译:

javac mypackage/my.java
javah -jni mypackage.my_java_class_name
gcc -shared -fpic -o mylib.so -I/Path_of_jdk/Include -I/Path_of_jkd/Include/linux my.c 

运行:

java -Dava.library.path=/path_of_myprogram/

1 个答案:

答案 0 :(得分:0)

让我通过 Luiggi Mendoza 扩展评论。

Java对 javah 命令生成的 .h 文件不感兴趣。它在 my.c 文件中查找名为 Java_mypackage_my_1java_1class_1name_nativeUpload 的C函数。 (注意_1,这是您班级名称中_的“翻译”结果。

单独使用 javah 无法解决此命名问题。