1

我正在开发一个使用 mediainfo 库的 java 项目。我在 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

我已经像这样编写了我的 java 代码 -

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.so.0、libmediainfo.so.0.0.0、libzen.so.0 和 libzen.so.0.0.0但没有运气...

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

我正在使用 Java 6、CentOS 5.6 最终版和最新的 mediainfo 版本。

4

3 回答 3

1

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

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

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

于 2013-01-12T08:05:20.220 回答
1

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

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

Native.loadLibrary("mediainfo",
于 2013-01-12T08:41:46.893 回答
1

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

于 2013-01-12T10:24:00.127 回答