我正在尝试用 Java 制作一个包含视频播放器的信使程序,所以我正在使用 vlcj。但我收到此错误:
线程“主”java.lang.UnsatisfiedLinkError 中的异常:
无法加载库“libvlc”:
找不到指定的模块。
我已按照此处的教程进行操作,但仍然出现此错误。这是我得到的唯一错误。
我在带有 x64 VLC 的 Windows 7 x64 Ultimate 上运行。我正在使用最新的 Eclipse 版本进行编码。
谁能指导我一步一步地解决这个问题?
我正在尝试用 Java 制作一个包含视频播放器的信使程序,所以我正在使用 vlcj。但我收到此错误:
线程“主”java.lang.UnsatisfiedLinkError 中的异常:
无法加载库“libvlc”:
找不到指定的模块。
我已按照此处的教程进行操作,但仍然出现此错误。这是我得到的唯一错误。
我在带有 x64 VLC 的 Windows 7 x64 Ultimate 上运行。我正在使用最新的 Eclipse 版本进行编码。
谁能指导我一步一步地解决这个问题?
您必须在应用程序中添加“libvlc”和“libvlccore”dll 路径。这些将出现在您的 vlc 安装文件夹中。您可以添加以下代码行以使其正常工作。
NativeLibrary.addSearchPath("libvlc", "C:/VideoLAN/VLC");
这里“C:/VideoLAN/VLC”是vlc的安装文件夹。
这是使用 JNA 加载 vlc 库的方式:
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "Path to native library");
对于我的程序,我将 vlc“libvlc.dll”和“vlccore.dll”放在一个子文件夹中,所以我使用和添加路径到末尾lib/VLC/
来加载相对于我的“program.jar”的文件:System.getProperty("user.dir")
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), System.getProperty("user.dir") + "/lib/VLC");
如果要从 Windows 7 中的默认 VLC 安装路径加载库,可以按如下方式进行:
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:/Program Files (x86)/VideoLAN/VLC");
编辑:如果您从 Eclipse 中运行此代码,它将不起作用,除非您指定 VLC 库文件的绝对路径。如果要测试相对路径,则首先构建 jar 文件并将其放置在相对于 VLC 库文件的正确文件夹中。
我阅读了您发布的vlcj说明。
似乎vlcj库正在使用 JNA,您可以使用NativeLibrary类设置库搜索路径, 如检查程序中所述:
import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;
import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;
public class Tutorial1A {
public static void main(String[] args) {
String vlcHome = "dir/with/dlls"; // Dir with vlc.dll and vlccore.dll
NativeLibrary.addSearchPath(
RuntimeUtil.getLibVlcLibraryName(), vlcHome
);
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
}
}
你可以尝试运行该代码并检查它是否在没有异常的情况下完成。
vlcj指令还指出了 JRE 的架构是相关的;您应该通过键入以下内容检查您的 JRE 架构:
java -version
JRE 架构应该与 VLC 相匹配(也许您可以在 About 对话框中查看 VLC 架构)。两者应该相等(32b 或 64b)。
但是,奇怪的是错误消息指的是libvlc而不是在 Windows 中执行的vlc或vlccore 。
无论如何,如果使用NativeLibrary将 VLC 路径添加到搜索路径不起作用并且 JRE 架构与 VLC 匹配,您可以添加您正在使用的代码以尝试了解更多信息。
确保您使用的是直接 x64 或 x32 环境。这表示:
现在你应该没事了。
如错误所示,JVM 正在尝试加载本机库“libvlc.dll”,但无法找到它。
要么将 dll 放在 java 安装的 .../jre/bin 目录中,要么使用java.library.path
属性指向它的位置。
jna.library.path
使用系统属性设置路径。可以在以下位置找到该技术的一个工作示例:
在public static void main(String[] args)
方法中。
此代码可能很快会更新,这将破坏上述链接,但您始终可以使用版本控制返回到我发布此代码的日期并查看代码。
cd src/main/resources/
cp -r /Applications/VLC.app/Contents/MacOS/lib darwin
rm darwin/*.*.*
cd darwin
install_name_tool -add_rpath @loader_path libvlc.dylib
mkdir vlc
cp -r /Applications/VLC.app/Contents/MacOS/plugins vlc/plugins
这是 macOS 版本。也许能帮到你。
├── kotlin
│ └── App.kt
└── resources
└── darwin
├── libvlc.dylib
├── libvlccore.dylib
└── vlc
└── plugins
├── liba52_plugin.dylib
├── libaccess_concat_plugin.dylib
├── libaccess_imem_plugin.dylib
├── libaccess_mms_plugin.dylib