簡體   English   中英

Android NDK - 未找到庫無法鏈接EXECUTABLE - 如何設置LD_LIBRARY_PATH?

[英]Android NDK - Library not found CANNOT LINK EXECUTABLE - how to set LD_LIBRARY_PATH?

我有一個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權限)。 有什么暗示嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM