gpt4 book ai didi

java - linux 64bit - jni 链接错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:39 26 4
gpt4 key购买 nike

我正在尝试获取一个在 64 位 ubuntu 上使用 JNI 从 C 调用 Java 的工作示例。
代码来自:calling java function from c using jni我正在编译使用:

gcc test.c -I/usr/lib/jvm/java-1.7.0-openjdk-amd64/include -I/usr/lib/jvm/java-1.7.0-openjdk-amd64/include/linux -c
gcc test.o -L/usr/lib/jvm/java-1.7.0-openjdk/amd64/jre/lib/amd64/server/ -ljvm -o jniTest

这不会产生任何错误,但如果我尝试 ldd jniTest,我会得到以下信息:

linux-vdso.so.1 =>  (0x00007fffe55d5000)
libjvm.so => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f85f2928000)
/lib64/ld-linux-x86-64.so.2 (0x00007f85f2d0a000)

如果我尝试 ./jniTest 它给出了这个错误:

test.o: In function `create_vm':
test.c:(.text+0x35): undefined reference to `JNI_CreateJavaVM'
collect2: error: ld returned 1 exit status

最佳答案

使用 -L/usr/lib/jvm/java-1.7.0-openjdk/amd64/jre/lib/amd64/server/ 告诉链接器在哪里可以找到 libjvm.so。在运行时你需要做同样的事情(http://linux.die.net/man/8/ld.so)。而且您还需要父目录,因为其他需要的库都在那里。一种方法是在命令行中指定它:LD_LIBRARY_PATH=/usr/lib/jvm/java-1.7.0-openjdk/amd64/jre/lib/amd64/server:/usr/lib/jvm/java-1.7.0-openjdk/amd64/jre/lib/amd64 ./jniTest.

解决需要指定路径的方法是根本不链接到 libjvm.so,而是在运行时找到它,然后使用 dlfcn.h 中的函数(http://linux.die.net/man/3/dlopenhttp://linux.die.net/man/3/dlsym)来使用

关于java - linux 64bit - jni 链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29459025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com