我有一个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/目录下.可执行文件和库的所有者和组都是系统:系统和权限也是可以的.
在开始时从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权限).有什么暗示吗?
标签:android
来源: https://codeday.me/bug/20190626/1290771.html