我现在正在与JNI合作。
我做了以下事情:
我制作了HelloJNI.java。它只是链接库libhello.so。
static {
System.loadLibrary("hello");
}
然后我制作了类文件,C文件和头文件。 我命令
#javac HelloJNI.java
#javah -classpath /usr/guest/workspace/path/ -jni package.HelloJNI
no errors till now.
我制作了libhello.so。
# gcc -shared -fpic -o libhello.so -I/usr/java/jdk1.7.0_21/include -I/usr/java/jdk1.7.0_21/include/linux HelloJNI.c
当我在eclipse中运行此项目时,错误如下所示。
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
at org.owls.jni.HelloJNI.<clinit>(HelloJNI.java:7)
我试过这个,但是不行。
# chcon -t texrel_shlib_t libhello.so
感谢阅读和明智的解决方案:D
答案 0 :(得分:0)
export LD_LIBRARY_PATH="/path/to/library/"
。您可以从命令行执行此操作,也可以将其添加到bashrc中
阅读http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html和jni.h and expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’
答案 1 :(得分:0)
我自己解决了这个问题。
其原因是javah命令。
我确实喜欢以下。
javah -classpath /home/guest/workspace/.../src org.owls.HelloJNI.
生成的头文件中的方法与我的预期不同。
我期待像
这样的东西JNIEXPORT JNICALL void Java_HelloJNI_say(JNIEnv* env, jobject j){}
但实际上是在下面生成的。
JNIEXPORT JNICALL void Java_org_owls_HelloJNI_say(JNIEnv* env, jobject j){}
这是我遇到问题的主要原因。
尽管我把自己扔了出去,但是非常感谢有分享我问题的人。祝你有个美好的一天:D