2011-08-01 24 views
1

私はこれに関する多くの記事を読んだことがありますが、私の問題は解決しません。別のJNI UnsatisfiedLinkError DLLの問題

私は、JavaプロセスがWindowsメッセージを送信できるようにする非常に小さなDLLを持っています。私はその後、私は不満のリンクエラーを取得VS2005でと/ MTとリンクし、すべての罰金ですが、私は私のDLLを作成しようとした場合MSVCRTに依存し、/ MDとリンクすることをコンパイルした

FindWindowEx(...) 
    SendMessage(...) 

それは単に呼び出します。

ます。java.lang.UnsatisfiedLinkError:MYDLL.DLL:依存ライブラリ、2つの欠落のDLL、GPSVC.DLLとIESHIMS.DLLを持ってするDepends.exeするよる

を見つけることができません。最初はc:\ windows \ system32に存在し、2番目はwinsxsパスにあります。 c:\ windows \ system32からロードされた他のDLLのロードがあります.GPSVC.DLLはwin7x64マシンの管理者でも実行できません - それはそれに依存します -

はとにかく、私は(単純化 - 私はjava.library.pathのの制御ではないよ)で、私のJavaでこれらのDLLの両方の負荷を強制しようとした

Field field = ClassLoader.class.getDeclaredField("usr_paths"); 
    field.setAccessible(true); 
    String[] paths = (String[]) field.get(null); 
    String[] tmp = new String[paths.length + 2]; 
    System.arraycopy(paths, 0, tmp, 0, paths.length); 
    tmp[paths.length] = "c:/windows/system32"; 
    tmp[paths.length + 1] = "c:/Windows/winsxs/amd64_microsoft-windows-ie-ieshims_31bf3856ad364e35_8.0.7601.17514_none_c06d7c9c27da8591"; 
    field.set(null, tmp); 

が、それは何の違いが行われていません。私はそれを静的にリンクさせるためにフォールバックすることができますが、私はむしろそうしたくありません。

私は次に何を試すことができますか? Antony

答えて

0

私はVisual Studio 2010を使用していますが、2005年にも動作します。

/MicrosoftVisualStudio20xx/VCのProgramFilesにあるvcvarsall.batを使用してVCコンパイラを構成できます。

コマンドラインで、x86またはia64、x86_amd64、またはx86_ia64のいずれかのオプションを指定してvsvarsall.batを起動するだけです。それが助けになるかどうかはわかりませんが、VCコンパイラが64ビットマシンで動作するように設定されていない問題の1つになる可能性があります。

私はJNIで作業していますが、私はコードをコンパイルするためにコマンドラインを使用しており、64ビットマシンでコンパイラを設定しなければなりませんでした。

または、コマンドラインでコンパイルしようとする可能性があります。ここで私のお気に入りのチュートリアルですhttp://www.ibm.com/developerworks/java/tutorials/j-jni/index.html

+0

私はDLLの32ビット版と64ビット版の両方をビルドしており、必要に応じてx86またはamd64でvcvarsallを実行しています。私のCLコマンドラインは: cl/I%JAVA_HOME%\ include/I%JAVA_HOME%\ include \ win32/nologo/W4/EHsc/O2/D "NDEBUG"/D "WIN32"/D _USRDLL/MT/LD PresencePump.cpp /FePresencePump-%1.dll/link/subsystem:windows :上記の両方のDLLは/ MT静的リンクを使用して動作しますが、/ MD/D _AFXDLLを使用すると問題が発生します。 – adb

関連する問題