我有一个 Android 活动,我正在其中执行 NDK 编译的代码(命令行程序):
Runtime.getRuntime().exec(myCommand);
并加载所需的共享库:
static {
System.loadLibrary(myLib);
}
但是当运行我的项目并打印错误流的输出时,我收到以下错误:
link_image[1963]: 7520 could not load needed library 'libmyLib.so' for './myCommand'
(load_library[1105]: Library 'libmyLib.so' not found)CANNOT LINK EXECUTABLE
我保证libmyLib.so
我的项目中确实存在libs/armeabi/
目录并将其复制到我的 Android 设备下/data/data/myProject.path.package/lib/
目录。可执行文件和库的所有者和组是system:system
并且权限也正常。
当一开始从 adb shell 执行命令时,我得到相同的错误,但随后我可以设置LD_LIBRARY_PATH
并且运行正常:
./adb shell
export LD_LIBRARY_PATH=/data/data/myProject.path.package/lib:$LD_LIBRARY_PATH
/data/data/myProject.path.package/myCommand
那么问题来了,如何从java Android 项目中做到这一点?
注意:我在 GT-P1010 上使用 Linux、Eclipse + Sequoyah、NDK-r5b、Android 2.3.6 (API 10)。
已解决:可以使用exec(String prog, String[] envp)
。就我而言,这是:
String[] envp = {"LD_LIBRARY_PATH=/data/data/cse.ecg.dcmtk/lib:$LD_LIBRARY_PATH"};
Runtime.getRuntime().exec(myCommand, envp);
现在的问题是exec()
执行的进程无法解析主机名(它可以从 adb shell 解析;已设置 Internet 权限)。有什么提示吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)