【问题标题】:Cannot fix vlcj load library 'libvlc'无法修复 vlcj 加载库“libvlc”
【发布时间】:2014-01-11 19:17:56
【问题描述】:

我正在使用 netbeans 来使用 vlcj jar 我的 jdk 是 jdk-7u45-windows-x64 而我的 vlc 是 64b 我通过转到库然后正确安装库单击库文件,然后添加 jar/文件夹,我添加了从这里下载的文件 file link 文件名 vlcj-3.0.0-dist.zip 我解压缩它然后通过选择添加它他们所有的测试代码都是这样的

    package translater;
import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;
import com.sun.jna.Native;


/**
 *
 * @author isslam
 */
public class Translater {


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        GuiClass is = new GuiClass("AnimeFactor");
        is.setVisible(true);

        Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);


    }

}

错误信息是这样的

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'libvlc': JNA native support (win32-amd64/libvlc.dll) not found in resource path (C:\Users\isslam\Desktop\vlcj-2.4.1-dist\vlcj-2.4.1\jna-3.5.2.jar;C:\Users\isslam\Desktop\vlcj-2.4.1-dist\vlcj-2.4.1\platform-3.5.2.jar;C:\Users\isslam\Desktop\vlcj-2.4.1-dist\vlcj-2.4.1\vlcj-2.4.1.jar;C:\Users\isslam\Documents\NetBeansProjects\translater\build\classes)
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:220)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:322)
at com.sun.jna.Library$Handler.<init>(Library.java:142)
at com.sun.jna.Native.loadLibrary(Native.java:387)
at com.sun.jna.Native.loadLibrary(Native.java:366)
at translater.Translater.main(Translater.java:27)

【问题讨论】:

    标签: java vlcj


    【解决方案1】:

    vlcj 依赖于 JNA。

    因此,您需要将JNA 和JNA Platform jar 文件添加到您的项目中。您如何执行此操作取决于您自己的项目和您使用的 IDE。最基本的方法是从链接[1] 和[2] 下载jar 文件并将它们复制到包含vlcj jar 文件的同一目录中。

    vlcj jar 文件中声明的清单类路径引用这些 JNA jar - 这意味着您只需确保将 jar 文件复制到项目中的正确位置,您不必显式添加它们到您的项目类路径。

    我的观点是如果你使用 Maven 会更简单,但无论如何......

    正确安装库后,下一个问题是让 JVM 加载本机库。

    由于多种原因,您可能会收到 UnsatisfiedLinkError,最常见的原因是:

    1. 无法找到您尝试加载的共享对象 (DLL);
    2. 您正在尝试混合 CPU 架构,即您的 JVM 是 64 位,但您的本机库是 32 位(反之亦然)。这永远行不通。

    使用 JNA 加载原生库时,有多种方法可以设置搜索路径...

    这在[3] 中有解释,但在这里总结一下,最简单的方法是在您的应用程序中添加一些类似这样的代码:

    NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "the-directory");
    

    此语句告诉 JNA 在特定目录中查找 LibVLC 共享对象(Windows 上的 DLL)。

    您将文字字符串“the-directory”替换为磁盘上包含 libvlc.dll 和 libvlccore.dll 文件(或等效的 .so 文件,如果您在 Linux 上)的目录的完整路径。

    没有 64 位或 32 位版本的 vlcj - 它只是独立于平台的 Java。

    [1]:http://search.maven.org/#artifactdetails%7Cnet.java.dev.jna%7Cjna%7C4.0.0%7Cjar

    [2]:http://search.maven.org/#artifactdetails%7Cnet.java.dev.jna%7Cjna-platform%7C4.0.0%7Cjar

    [3]:http://www.capricasoftware.co.uk/projects/vlcj/tutorial1.html

    如果您使用的是 vlcj 3.0.0 或更高版本,则上述依赖项(以及指向工件的链接)是正确的。如果您使用的是 vlcj 的早期版本,例如 2.4.1,那么您需要使用 JNA 和 JNA Platform 版本 3.5.2 而不是 4.0.0。

    【讨论】:

    • 对不起,你能告诉我更多关于这个的信息,这是我的第一个应用程序
    • 你能告诉我我应该如何处理你给我的这两个网站
    • JNA [1] 和 JNA Platform [2] 它们在库文件中
    • 在哪里可以找到 vlcj 64b,因为我的 jdk 是 jdk-7u45-windows-x64 而我的系统是 64b 而我的 vlc 播放器是 64xb
    • 没有 32 位或 64 位 vlcj 之类的东西。唯一必须匹配 CPU 架构的是 JVM 和 vlc 本机库。
    【解决方案2】:

    是的,但我的问题是 jvm,我认为它是 32b,所以我通过在此处下载表格来更改它java jvm此页面有 32 和 64 类型

    【讨论】:

    • 如果您的问题与不匹配的 JVM 架构有关,就​​像建议的其他答案一样,也许您应该接受该答案以关闭此问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2016-07-05
    相关资源
    最近更新 更多