Android的NDK - 库没有发现不能链接可执行文件 - 如何设置LD_LIBRARY_PATH? [英] Android NDK - Library not found CANNOT LINK EXECUTABLE - how to set LD_LIBRARY_PATH?
问题描述
我有在那里我执行NDK编译code(命令行程序)一个Android的活动:
I have an Android activity where I'm executing NDK compiled code (command line program) with:
Runtime.getRuntime().exec(myCommand);
和加载所需的共享库:
and load the needed shared libraries with:
static {
System.loadLibrary(myLib);
}
但运行我的项目,从印刷错误流的输出,当我收到以下错误:
but when running my project and printing the output from error stream I get the following error:
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
在我的项目确实存在库/ armeabi /
目录下,它的复制到我的 /data/data/myProject.path.package/lib /
目录下的Android设备。所有者和组的两个可执行文件和库是系统:系统
和权限都OK以及
I assure libmyLib.so
does exist in my project under libs/armeabi/
directory and it's copied to my Android device under /data/data/myProject.path.package/lib/
directory. Owner and group of both executable and library are system:system
and permissions are ok as well.
当在开始执行亚行的shell命令我得到了同样的错误,但我可以设置 LD_LIBRARY_PATH
,它运行确定:
When executing the command from adb shell in the beginning I get the same error but then I can set LD_LIBRARY_PATH
and it runs ok:
./adb shell
export LD_LIBRARY_PATH=/data/data/myProject.path.package/lib:$LD_LIBRARY_PATH
/data/data/myProject.path.package/myCommand
所以现在的问题是,如何做到这一点从Java的Android项目?
So the question is, how to do that from java Android project?
注:我在GT-P1010使用Linux,Eclipse的+塞阔亚,NDK-R5B的Android 2.3.6(API 10)
Note: I'm using Linux, Eclipse + Sequoyah, NDK-r5b, Android 2.3.6 (API 10) on GT-P1010.
推荐答案
解决:您可以使用 EXEC(字符串前卫,字符串[] envp)
。就我而言,这是:
Solved: you can use exec(String prog, String[] envp)
. In my case this was:
String[] envp = {"LD_LIBRARY_PATH=/data/data/cse.ecg.dcmtk/lib:$LD_LIBRARY_PATH"};
Runtime.getRuntime().exec(myCommand, envp);
现在的问题是,与 EXEC()
执行无法解析主机名(它确实来自亚行壳;上网权限设置)的过程。有关任何提示?
The issue now is that with exec()
the process executed can't resolve hostnames (it does from adb shell; Internet permission is set). Any hint about that?
这篇关于Android的NDK - 库没有发现不能链接可执行文件 - 如何设置LD_LIBRARY_PATH?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!