簡體   English   中英

使用JNI時如何擺脫LD_PRELOAD

[英]How to get rid of LD_PRELOAD when using JNI

我有JNI庫libA.so,它依賴於C庫libB.so.

在Java中,解決“符號查找錯誤”的一種方法是:

class A{
    public native void g();
    static{
        System.load("/asdfghjk/libA.so");
    }
}

然后運行java程序

LD_PRELOAD=libB.so

但是,這個hack不能在生產系統中使用,例如當使用Tomcat JSF部署程序時。

以下“解決方案”不起作用:

class A{
    public native void g();
    static{
        System.load("/asdfghjk/libB.so");
        System.load("/asdfghjk/libA.so");
    }
}

它會產生錯誤:

symbol lookup error: /blah/... undefined symbol: _ZNblahblahblah...

該錯誤是因為找不到共享庫所依賴的庫。

您應該將依賴庫的位置添加到java.library.path ,首先以正確的順序顯式地System.load它們,或者以某種方式使用dlopen系統調用來加載依賴項。

這個問題可能會有所幫助: Java:加載具有依賴關系的共享庫

暫無
暫無

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

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