android ndk编译 无法链接外部库,Android NDK – 未找到库无法链接EXECUTABLE – 如何设置LD_LIBRARY_PATH?...

在Android应用中,作者遇到一个NDK编译问题,即在执行命令行程序时无法找到所需的共享库libmyLib.so。尽管库已正确放置在设备上,但仍然报错。通过设置LD_LIBRARY_PATH环境变量,问题在adbshell中得到解决,但在Java Android项目中仍然存在。解决方案是使用Runtime.getRuntime().exec()方法,并传入包含LD_LIBRARY_PATH的环境变量数组,从而成功执行程序。然而,这导致了进程无法解析主机名的新问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值