gpt4 book ai didi

java - 使用 JNI 时如何摆脱 LD_PRELOAD

转载 作者:行者123 更新时间:2023-11-29 05:50:47 24 4
gpt4 key购买 nike

我有 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: load shared librariees with dependencies

关于java - 使用 JNI 时如何摆脱 LD_PRELOAD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13952189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com