Android NDK - 未找到库无法链接EXECUTABLE - 如何设置LD_LIBRARY_PATH?

时间:2012-04-27 09:38:44

标签: android

我有一个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/,并将其复制到/data/data/myProject.path.package/lib/目录下的Android设备中。可执行文件和库的所有者和组都是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)。

1 个答案:

答案 0 :(得分:4)

解决:您可以使用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权限)。关于那个的任何提示?