gpt4 book ai didi

linux - System.load() 方法在不设置 LD_LIBRARY_PATH 环境变量的情况下不加载共享库

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:17 28 4
gpt4 key购买 nike

我在 Linux 中加载共享库时遇到了一个奇怪的问题。我的应用程序中有两个共享库(假设是 abc.so 和 xyz.so)。 abc.so 依赖于 xyz.so,即每当您尝试加载 abc.so 时,jvm 将首先加载 xyz.so。

现在,当我通过将 LD_LIBRARY_PATH 设置为包含这两个库的文件夹来加载这些库时,它的工作没有任何问题。但是,当我尝试使用 System.load("%FULL_PATH%/abc.so") 加载 abc.so 时,它没有加载。以下行显示为错误: undefined symbol :__cxa_pure_virtual。

任何人都可以帮助我理解这个错误吗?提前致谢!

注意:由于某些项目要求,我无法更改 LD_LIBRARY_PATH,因此我需要使用 System.load() 方法加载 abc.so。

最佳答案

加载失败,因为链接器无法解析“xyz.so”对“abc.so”的依赖。 Linux 加载程序不会自动在与“abc.so”相同的目录中查找“xyz.so”。您需要通过 LD_LIBRARY_PATH 环境变量或通过修改 /etc/ld.so.conf 文件明确告诉它在哪里查找。

我没有在 Java 中尝试过,但是在 Python 模块中,当我需要加载 DLL 时,我通常只是在尝试加载库之前立即修改进程的环境变量。这比编写包装器脚本或修改主目录的点文件要容易得多。

或者,您也可以按正确的顺序手动加载所有先决条件。但是,您需要确保加载程序将所有符号放在全局符号表中,而不是私下加载它们。不确定 Java 如何处理。

关于linux - System.load() 方法在不设置 LD_LIBRARY_PATH 环境变量的情况下不加载共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6296543/

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