简体   繁体   English

无法在linux中加载库MediaInfo

[英]Unable to load library MediaInfo in linux

I am working on a java project where I am using mediainfo libraries. 我正在研究一个java项目,我正在使用mediainfo库。 My JNA code with midiainfo.dll in windows works fine, but when I run my code in linux it is not working and giving following exception - 我在Windows中使用midiainfo.dll的JNA代码工作正常,但是当我在linux中运行我的代码时,它无法工作并给出以下异常 -

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

I have written my jave code like this - 我写了这样的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);
}

and just by adding mediainfo.dll in classpath this is working like magic, but in linux i have tried to add libmediainfo.so.0, libmediainfo.so.0.0.0, libzen.so.0 and libzen.so.0.0.0 but no luck... 只是通过在classpath中添加mediainfo.dll这就像魔术一样,但在linux中我试图添加libmediainfo.so.0,libmediainfo.so.0.0.0,libzen.so.0和libzen.so.0.0.0但没有运气......

Does anybody know how to run mediainfo+java in linux? 有谁知道如何在linux中运行mediainfo + java?

I m using Java 6, CentOS 5.6 final and latest mediainfo version. 我使用的是Java 6,CentOS 5.6最终和最新的mediainfo版本。

I solved my problem by making symlink 我通过制作符号链接解决了我的问题

I have used following commands from superuser 我使用了超级用户的以下命令

$ sudo ln -s /usr/lib/libmediainfo.so.0 /usr/lib/libMediaInfo.so $ sudo ln -s /usr/lib/libmediainfo.so.0 /usr/lib/libMediaInfo.so
$ sudo ln -s /usr/lib/libzen.so.0 /usr/lib/libzen.so $ sudo ln -s /usr/lib/libzen.so.0 /usr/lib/libzen.so

File names on *nix are case sensitive, so if your library is called libmediainfo.so , you need to change * nix上的文件名区分大小写,因此如果您的库名为libmediainfo.so ,则需要更改

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

to

Native.loadLibrary("mediainfo",

1) Make sure the file is actually called "libMediaInfo.so" (case sensitive!); 1)确保文件实际上被称为“libMediaInfo.so”(区分大小写!); it can be a symlink pointing to actual version, lots of libs are setup like that. 它可以是指向实际版本的符号链接,很多lib都是这样设置的。 2) Make sure this file is in LD_LIBRARY_PATH on *nix 3) Making it low case in the code will probably make it a bit cleaner, but that's a matter of style - important thing is lib name in the code must correspond to file name on the system, including case 2)确保此文件位于* nix上的LD_LIBRARY_PATH中3)在代码中使其小写可能会使它更清晰,但这是样式的问题 - 重要的是代码中的lib名称必须对应于文件名系统,包括案例

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM