Java 如何为VLCJ添加或安装本机x64库?
我正在尝试用Java编写一个messenger程序,其中有一个视频播放器,所以我使用vlcj。但我收到了这个错误: 线程“main”java.lang.UnsatifiedLinkError中出现异常:Java 如何为VLCJ添加或安装本机x64库?,java,video,windows-7-x64,vlcj,Java,Video,Windows 7 X64,Vlcj,我正在尝试用Java编写一个messenger程序,其中有一个视频播放器,所以我使用vlcj。但我收到了这个错误: 线程“main”java.lang.UnsatifiedLinkError中出现异常: 无法加载库“libvlc”: 找不到指定的模块 我已经遵循了的教程,但我仍然得到这个错误。这是我唯一的错误 我在Windows7x64Ultimate上运行,带有x64VLC。我正在使用最新的Eclipse版本进行编码 有谁能指导我一步一步地解决这个问题吗?正如错误所示,JVM正在尝试加载本机库
无法加载库“libvlc”:
找不到指定的模块 我已经遵循了的教程,但我仍然得到这个错误。这是我唯一的错误 我在Windows7x64Ultimate上运行,带有x64VLC。我正在使用最新的Eclipse版本进行编码
有谁能指导我一步一步地解决这个问题吗?正如错误所示,JVM正在尝试加载本机库“libvlc.dll”,但找不到它 将dll放在java安装中的…/jre/bin目录中,或者使用
java.library.path
属性指向它的位置
另请参见我读到的
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)
然而,奇怪的是,错误消息指的是在Windows中执行的libvlc,而不是vlc或vlccore
无论如何,如果使用NativeLibrary将VLC路径添加到搜索路径不起作用,并且JRE体系结构与VLC体系结构匹配,则可以添加正在使用的代码以尝试了解更多信息。这就是使用JNA加载VLC库的方法:
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "Path to native library");
对于我的程序,vlc“libvlc.dll”和“vlccore.dll”位于子文件夹lib/vlc/
中,因此我使用System.getProperty(“user.dir”)
加载与“program.jar”相关的文件,并将路径添加到末尾:
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库文件的正确文件夹中。您必须在应用程序中添加“libvlc”和“libvlccore”dll路径。这些将出现在您的vlc安装文件夹中。您可以添加以下代码行以使其正常工作
NativeLibrary.addSearchPath("libvlc", "C:/VideoLAN/VLC");
这里的“C:/VideoLAN/VLC”是VLC的安装文件夹。使用
jna.library.path
系统属性设置路径。此技术的工作示例可在以下网址找到:
在publicstaticvoidmain(String[]args)
方法中
此代码可能很快就会更新,这将破坏上述链接,但您始终可以使用版本控制返回到我发布此代码的日期,并查看代码。确保您使用的是直列x64或x32环境。这意味着:
- Windows x64(显然)
- Java JRE x64(不要安装第二个x32 JRE)
- Java JDK x64
- VLC x64
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
我将dll放在jre/bin中,但仍然无法工作。如何使用java.library.path属性?我的JRE和VLC都是64b,因此不会引发问题,而且我还使用了NativeLibrary搜索,但仍然出现了该错误。我尝试了网页上的所有内容,但仍然出现了相同的错误。此外,VLC文件夹中的.dll文件名为.dll.a,因此当我将它们放在jre/bin中时,我将它们更改为.dll,但仍然存在相同的错误。我应该在VLC文件夹中将它们也更改为.dll吗?您的VLC安装应该在某个文件夹中有
libvlc.dll
和libvlccore.dll
。.a扩展看起来像一个Linux二进制文件。如果您拥有的文件是:libvlc.dll.a
,则可能您没有指向正确的VLC文件夹,或者您的SO没有使用VLC程序。VLC 2.0.5 for Windows在程序文件夹中有一个文件libvlc.dll
(没有.a
),请按照此链接中的步骤[playing media file mp4 file][1][1]:java.lang.RuntimeException:无法获取新的本机库实例