我正在尝试用Java制作一个有视频播放器的信使程序,所以我使用的是vlcj。但是我收到了这个错误:
线程“main”中的异常java.lang.UnsatisfiedLinkError:
无法加载库'libvlc':
找不到指定的模块。
我已经按照here的教程进行了操作,但我仍然遇到此错误。这是我得到的唯一错误。
我使用x64 VLC在Windows 7 x64 Ultimate上运行。我正在使用最新的Eclipse版本进行编码。
有人可以指导我如何解决这个问题吗?
答案 0 :(得分:3)
您必须在应用程序中添加“libvlc”和“libvlccore”dll路径。这些将出现在您的vlc安装文件夹中。您可以添加以下代码行以使其正常工作。
NativeLibrary.addSearchPath("libvlc", "C:/VideoLAN/VLC");
此处“C:/ VideoLAN / VLC”是vlc的安装文件夹。
答案 1 :(得分:1)
我看了the vlcj instructions you posted。
似乎 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架构匹配(也许您可以在“关于”对话框中检查VLC架构)。两者都应该相等(32b或64b)。
但是,奇怪的是,错误消息是指 libvlc 而不是 vlc 或 vlccore 在Windows中执行。
无论如何,如果使用 NativeLibrary 将VLC路径添加到搜索路径不起作用且JRE架构与VLC架构匹配,您可以添加您正在使用的代码以尝试了解更多信息
答案 2 :(得分:1)
这是使用JNA加载vlc库的方法:
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "Path to native library");
对于我的程序,我将vlc“libvlc.dll”和“vlccore.dll”放在子文件夹lib/VLC/
中,所以我使用{{1}加载相对于我的“program.jar”的文件并将路径添加到结尾:
System.getProperty("user.dir")
如果要从Windows 7中的默认VLC安装路径加载库,可以按如下方式执行:
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), System.getProperty("user.dir") + "/lib/VLC");
编辑:如果从eclipse中运行此代码,它将无法工作,除非您指定VLC库文件的绝对路径。如果要测试相对路径,请首先构建jar文件并将其放在相对于VLC库文件的正确文件夹中。
答案 3 :(得分:1)
确保使用的是直接的x64或x32环境。这意味着:
现在你应该没事。
答案 4 :(得分:0)
如错误所示,JVM正在尝试加载本机库“libvlc.dll”,但无法找到它。
将dll放在java安装的... / jre / bin目录中,或使用java.library.path
属性指向它的位置。
另见How to add native library to "java.library.path" with Eclipse launch (instead of overriding it)
答案 5 :(得分:0)
使用jna.library.path
系统属性设置路径。可以在以下位置找到此技术的工作示例:
在public static void main(String[] args)
方法中。
此代码可能会很快更新,这将破坏上述链接,但您始终可以使用版本控制返回我发布的日期并查看代码。
答案 6 :(得分:0)
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