我正在用一些相互依賴的庫移植一大塊本機代碼。加載代碼失敗,因爲Android鏈接器只在/system/lib/
中查找依賴關係,而不在/data/data/com.packagename.nnn/lib
的應用程序安裝目錄中查找依賴項。在Android上依賴加載共享庫
作爲第一種解決方法,我使用System.load()以正確的從屬順序從Java加載了所有.so文件。這個解決方案對我來說並不令人滿意,主要是因爲由於插件架構的緣故,一組庫由構建變爲構建。此外,用戶界面不需要太多瞭解本地庫。
我發現Android不支持RPATH或爲應用程序設置LD_LIBRARY_PATH。我發現唯一的解決方法是用完全合格的SONAME構建庫。
但是有些依賴關係是預先構建的。
是否可以編譯完全合格的標籤需要到我自己的圖書館,即使需要的。所以不具有完全合格的SONAME?
或者是否有可能修改現有的.so並用完全合格的替換它的SONAME或NEEDED而無需重新編譯?
@tasaarni你有沒有想過這個?幾乎在這個確切的問題,我在DLL地獄。我的共享庫依賴依賴於libicu,它包含在許多Android設備上,但通常是舊版本,不包含我需要的符號。所以我試圖以正確的依賴順序(按照'ndk-depends')加載所需的庫 - 新的libicu似乎以這種方式加載好,但即使如此,依賴庫也無法找到符號它需要。我錯過了一個步驟嗎? – ephemer