gpt4 book ai didi

Java System.load(libName) 查找错误的库名称

转载 作者:太空宇宙 更新时间:2023-11-04 11:07:57 25 4
gpt4 key购买 nike

当我尝试在运行时加载 JNI 库时,我在一台客户计算机上遇到了奇怪的行为。

尝试使用

加载库时
System.load("libtestlibrary.so")

我得到一个

liblibtestlibrary.so.so: cannot open shared object file: No such file or directory

似乎给定的库名称(错误地)以“lib”为前缀并以“.so”为后缀,因此无法找到我们的库。

这只发生在一台机器 (AIX 6) 上。我无法使用完全相同的 JRE 在我们自己的 AIX 6 机器上重现此行为,因此我猜测这是由客户计算机上的某些操作系统设置引起的。

有人知道如何关闭此功能吗?

最佳答案

您可以使用:

System.loadLibrary("libraryname");

它将被正确扩展为系统特定的符号。或者您可以使用:

System.load("you_can_have_anything_you_like_here")

在第二种情况下,您所需要做的就是指向文件的正确位置。如果您正在寻求跨系统开发,您可能有兴趣将 native 代码打包到 JAR 中。请查看此处的示例代码,其中库是从 JAR 文件中获取的

https://github.com/mkowsiak/jnicookbook/tree/master/recipes/recipeNo031

此外,请确保 LD_LIBRARY_PATH 中存在其他库。请注意,java.library.path 仅对您的“第一个” native 库有效。如果您的代码使用其他一些共享库,则必须使用 rpath 进行编译或确保库在系统范围内可见。

另一种方法是通过 stub :http://jnicookbook.owsiak.org/recipe-No-018/

在这种情况下,您可以根据需要加载库并执行任何您喜欢的操作(例如即时更改 native 代码)。

关于Java System.load(libName) 查找错误的库名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46297723/

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