2013-10-07 111 views
1

我試圖執行NDK共享庫需要在Linux下編譯爲.so文件等外部本地庫。的Android NDK,找不到依賴庫

我有以下關係:libl1取決於libl2。

我試圖預建libl2.so爲共享並添加入libl1模塊。

static { 
    System.loadLibrary('l1'); 
} 

不過,這並不三星4.03 Android版本的工作:當我加載libl1這樣一切編譯罰款和我LG的Nexus 4的罰款。在這個設備中它與這個代碼一起工作:

static { 
    System.loadLibrary('l2'); 
    System.loadLibrary('l1'); 
} 

我發現Android ClassLoader無法加載依賴關係。但爲什麼它在Nexus 4上正常工作?但不是三星設備?

回答

2

上Nexus4您所看到的行爲不是預期了,我再次測試,沒有特殊待遇,至少在訴4.2.2(建JDQ39)。也許你的Nexus上安裝了其他一些Android?也許你的設備出於任何原因碰巧有文件/system/lib/libl2.so

三星設備的行爲預期,而且它是什麼Android團隊認爲是正確的。所有的共享庫都必須按照它們依賴於Java的順序加載,或者如果你願意的話,你總是可以明確地調用dlopen(),但是放棄使用鏈接器解析這些共享庫中函數引用的所有簡單性。