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

私はこのように私の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.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

* nixのファイル名では大文字と小文字が区別されるため、ライブラリが呼び出されたlibmediainfo.so場合は、変更する必要があります。

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

Native.loadLibrary("mediainfo",
于 2013-01-12T08:41:46.893 に答える
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

1) ファイルが実際に「libMediaInfo.so」と呼ばれていることを確認します (大文字と小文字を区別します!)。実際のバージョンを指すシンボリックリンクにすることができます。多くのライブラリはそのようにセットアップされています。2) このファイルが *nix の LD_LIBRARY_PATH にあることを確認してくださいケースを含むシステム

于 2013-01-12T10:24:00.127 に答える