我有一个 JNI 库,供 Android 应用程序与 NDK 一起使用。
我没有源代码,只是为某些拱门编译了 .so 文件。
我想在 64 位 x86 Linux PC 上的简单控制台 Java 应用程序中调用该库中的函数。
我做了什么:
- 我从 x86_64 文件夹中获取了该库,并将其加载到我的 Java 程序中,使用
System.loadLibrary
- 尝试启动该程序并收到带有详细信息的 UnsatisfiedLinkError
liblog.so: cannot open shared object file: No such file or directory
.
- 所以我从官方 NDK 获取了 x86_64 arch 的 liblog.so 并加载了它,然后得到了同样的错误
libstdc++.so: cannot open shared object file: No such file or directory
- 对 libstdc++.so 库做了同样的事情并得到了这个
/usr/lib/x86_64-linux-gnu/libc.so: invalid ELF header
.
- 打开 libc.so,它似乎只是一个文本文件...将其替换为正确的 libc.so 文件
- 最后我的库得到了 UnsatisfiedLinkError
undefined symbol: __stack_chk_guard
评论。看来我的库与 Android 的关系非常紧密
如果没有任何特定于 Android 的内容,我应该怎么做才能在正常程序中使用这个库?
简而言之 - Android 和桌面 Linux 二进制文件是不相容,即使它们针对相同的 CPU 架构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)