gpt4 book ai didi

java - 无法读取通过 .a 实现 JNI 的 .so 和 Ubuntu x64、Netbeans IDE 上的主应用程序

转载 作者:太空宇宙 更新时间:2023-11-04 04:12:23 25 4
gpt4 key购买 nike

好的..

我在通过 .a 和我的主应用程序读取 .so 文件时遇到问题。

我的主控制台应用程序包含.a静态库文件,.a静态库文件中的函数使用dlopen()函数读取.so文件。

我的.so项目是使用JNI调用java源代码的共享对象。它编译良好并生成.so文件。

我的.a项目是使用函数dlopen()读取.so文件。它编译良好并生成 .a 文件。

但是,它在 dlopen() 函数处停止了。它没有指向我的 .so 文件的指针。当我使用 dlerror() 看到错误时,它显示:

"fail to dlopen, libjvm.so: cannot open shared object file: No such file or directory"

我正确设置了 LD_LIBRARY_PATH,我认为这就是为什么我的实现 JNI 的 .so 项目编译得很好:我为这个 .so 项目包含了 JDK 的正确包含和库路径。

我使用的是 Ubuntu 64 位,并使用 Netbeans IDE 处理所有控制台、.a、.so 项目(总共 3 个项目)。

但有趣的是,如果我尝试在一个简单的 C 程序中加载该 .so 文件,它读起来非常好。

我不知道为什么以下独立的简单c程序可以读取我的.so文件,但我的主项目的控制台应用程序无法通过.a文件读取。

这是这个简单的 C 程序的源代码:

#include <stdio.h>
#include <dlfcn.h>


int main(int argc, char **argv)
{
void *handle = NULL;
int (*result)(int, int);

handle = dlopen("/home/online0227/desktop/runDynamic/myso.so", RTLD_LAZY);
if ( !handle )
{
printf("fail to dlopen, %s\n", dlerror());
return 0;
} else {
printf("succeeded1111\n");
}


dlclose(handle);
return 0;
}

以下是我编译和运行这个简单 C 程序时输入的内容:

gcc -o main main.c -ldl
./main

最佳答案

只是瞎猜:libjvm.so 可能依赖于另一个无法找到/打开的 .so 文件。

尝试运行:

ldd libjvm.so

关于java - 无法读取通过 .a 实现 JNI 的 .so 和 Ubuntu x64、Netbeans IDE 上的主应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18449143/

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