有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法在linux中加载库MediaInfo

我正在从事一个java项目,在该项目中我使用mediainfo库。 我的JNA代码和midianfo。windows中的dll工作正常,但当我在linux中运行代码时,它不工作,并出现以下异常-

java.lang.UnsatisfiedLinkError: Unable to load library 'MediaInfo': libMediaInfo.so: cannot open shared object file: No such file or directory

我已经这样写了我的jave代码-

interface MediaInfoDLL_Internal extends Library
{

    MediaInfoDLL_Internal INSTANCE = (MediaInfoDLL_Internal) Native.loadLibrary("MediaInfo", MediaInfoDLL_Internal.class, singletonMap(OPTION_FUNCTION_MAPPER, new FunctionMapper()
        {

            public String getFunctionName(NativeLibrary lib, Method method)
            {
                // MediaInfo_New(), MediaInfo_Open() ...
                return "MediaInfo_" + method.getName();
            }
        }
    ));


    //Constructor/Destructor
    Pointer New();
    void Delete(Pointer Handle);

    //File
    int Open(Pointer Handle, WString file);
    void Close(Pointer Handle);

    //Infos
    WString Inform(Pointer Handle);
    WString Get(Pointer Handle, int StreamKind, int StreamNumber, WString parameter, int infoKind, int searchKind);
    WString GetI(Pointer Handle, int StreamKind, int StreamNumber, int parameterIndex, int infoKind);
    int     Count_Get(Pointer Handle, int StreamKind, int StreamNumber);

    //Options
    WString Option(Pointer Handle, WString option, WString value);
}

只需添加mediainfo。类路径中的dll这就像魔术一样,但在linux中,我尝试添加libmediainfo。所以0,libmediainfo。所以0.0.0,libzen。所以0和libzen。所以0.0.0但没有运气

有人知道如何在linux中运行mediainfo+java吗

我使用的是Java6、CentOS5.6最终版和最新的mediainfo版本


共 (3) 个答案

  1. # 1 楼答案

    *nix上的文件名区分大小写,因此如果库名为libmediainfo.so,则需要更改

    Native.loadLibrary("MediaInfo",....
    

    Native.loadLibrary("mediainfo",
    
  2. # 2 楼答案

    1)确保文件实际名为“libMediaInfo.so”(区分大小写!);它可以是指向实际版本的符号链接,很多lib都是这样设置的。2) 确保此文件位于*nix 3)上的LD_LIBRARY_PATH中,使其在代码中小写可能会使其更干净,但这是一个样式问题-重要的是代码中的lib名称必须与系统上的文件名(包括大小写)相对应

  3. # 3 楼答案

    我通过制作符号链接解决了我的问题

    我使用了超级用户的以下命令

    $sudo ln-s/usr/lib/libmediainfo。所以0/usr/lib/libMediaInfo。所以
    $sudo ln-s/usr/lib/libzen。所以0/usr/lib/libzen。所以