• 締切済み

dll ⇒ 自作dl ⇒ Java

お世話になっております。 何度も質問して申し訳ないですが、わかる方いらっしゃれば ご回答よろしくお願いいたします。 現在JavaでJNIを使用し、呼び出したC++からハードウェアへ 接続するというプログラムを開発しております。 その際、C++をdll形式にして、そのdllをJavaで呼び出すような形なのですが 私が使用しているコンピュータ(Windows 7)では、ハードウェアへの接続ができています。 コマンドを送信し、レスポンスを取得し、Javaのプログラムで表示ができます。 しかし、別のコンピュータ(Windows XP)で、開発したプログラムを実行すると dllを読み込む時点で下記のエラーが出てしまいます。 java.lang.UnsatisfiedLinkError: no JNI001 in java.library.path JNI001がC++で作成したdllです。 JNI001.dllは、実行したプログラムと同じフォルダにありますので、おかしいなと思いまして C:\Windows へ入れてみても結果は変わりません。 私が使っていたコンピュータのeclipseをまるまるコピーして実行しても効果なし。 環境変数も私のコンピュータとほとんど変わりません。 XPのJavaをインストールし直しても変わりません。 フォルダ階層やフォルダ名などチェックしましたが、7とXPで変わった点もないように思います。 そこで、少し気になったのですが、 現在開発中のプログラムは Java → JNI001.dll → ○○.dll → ハードウェア ○○.dllはハードウェアを動かすためのdllです。 上記の仕様に問題があるのでしょうか。 それでは私のコンピュータで接続できている理由がわからなくなりますが ・・・もう、なにもわかりません どうか、ご教授宜しくお願い致します。

  • Java
  • 回答数1
  • ありがとう数1

みんなの回答

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

> java.lang.UnsatisfiedLinkError: no JNI001 in java.library.path JNI001.DLLがそもそも見つからないか、JNI001.DLLをロードしようとして何らかの理由で初期化に失敗したのでしょう。 JNI001.DLLが参照する他のDLLが全て揃っているか調べてみましたか? 質問中に○○.dllは挙がっていますが、他にもJNI001.DLLが必要とするDLLがあるかもしれません。 Dependency Walkerとか、dumpbin.exeの/dependentsオプションとかを使えば、JNI001.DLLが参照している他のDLLが何か分かります。

pokeman-v
質問者

お礼

ご回答ありがとうございます。 JNI001.DLLの作成に問題がありました。 C++でdllを作成する際、プロジェクトの設定、左上のほうの DebugとReleaseを選択する画面にて、Releaseと指定せずに実行し、 dllを他のコンピュータ上に移動させると認識しない。という おそらくC++dllの仕様であったと思います。 お騒がせして申し訳ございません。 ご回答ありがとうございました。

関連するQ&A

  • Java JNI C++リンク dll読み込まない

    お世話になっております 何度も質問して申し訳ないですが、わかる方いらっしゃれば ご回答よろしくお願いいたします。 現在JavaでJNIを使用し、呼び出したC++からハードウェアへ 接続するというプログラムを開発しております。 その際、C++をdll形式にして、そのdllをJavaで呼び出すような形なのですが 私が使用しているコンピュータ(Windows 7)では、ハードウェアへの接続ができています。 コマンドを送信し、レスポンスを取得し、Javaのプログラムで表示ができます。 しかし、別のコンピュータ(Windows XP)で、開発したプログラムを実行すると dllを読み込む時点で下記のエラーが出てしまいます。 java.lang.UnsatisfiedLinkError: no JNI001 in java.library.path JNI001がC++で作成したdllです。 JNI001.dllは、実行したプログラムと同じフォルダにありますので、おかしいなと思いまして C:\Windows へ入れてみても結果は変わりません。 私が使っていたコンピュータのeclipseをまるまるコピーして実行しても効果なし。 環境変数も私のコンピュータとほとんど変わりません。 XPのJavaをインストールし直しても変わりません。 フォルダ階層やフォルダ名などチェックしましたが、7とXPで変わった点もないように思います。 そこで、少し気になったのですが、 現在開発中のプログラムは Java → JNI001.dll → ○○.dll → ハードウェア ○○.dllはハードウェアを動かすためのdllです。 上記の仕様に問題があるのでしょうか。 それでは私のコンピュータで接続できている理由がわからなくなりますが ・・・もう、なにもわかりません どうか、ご教授宜しくお願い致します。

  • Eclipseにdllがうまく読み込めない

    JNIを使った開発をしてdllを作りました。 コマンドプロンプト上ではうまく動くのですが、eclipseに取り込んで実行の構成から環境変数を入れましたが、 Exception in thread "Thread-0" java.lang.UnsatisfiedLinkError: controller.Joystick.getXPos(I)F at controller.Joystick.getXPos(Native Method) at controller.Joystick.getXPos(Joystick.java:45) at controller.ControllerSample.run(ControllerSample.java:20) と表示されうまくいきません。 どうしたらよろしいでしょうか?

    • ベストアンサー
    • Java
  • JavaからJNIを使わず既存DLLを呼び出す

    現在、GeneXusというジェネレータで出力されたJavaコードを、GeneXusが使用しているフレームワークに依存しない形で解体する作業を行っております。 作業を進めていくうちに、こちらのシステムの内部にwin32DLLを呼び出している箇所があることに気づきました。 DLLの内部の処理がかなり重要な処理なのですが、現状どうにも手を出せない状態です。 JNIを使用してソースからDLLをコンパイルしなおせばUnsatisfiedLinkErrorを回避できることが分かったのですが、DLLのソースがないのでJNIでヘッダ情報などを生成することができない状況です。 ちなみに、DLLはとあるpackageからコールされており、そのpackageからなら問題なくコールできるようです。しかし私が新たに作成したコードから呼び出すと、やはりUnsatisfiedLinkErrorで「nativeメソッドが見つかりません」と言われます。 どうにか、既存のDLLをJavaから呼び出す方法はないでしょうか? もしくは、DLLの内部の処理を解析する方法はないでしょうか。 完全に行き詰っておりますので、何か案があればよろしくお願いいたします。

  • Java hs_err_pid0000.log解析

    こんにちわ おわかりになる方、ご回答宜しくお願い致します。 現在、JavaでJNIを使用し、C++でdllを作成、C++のdllから他社製dll、他社製dllからハードウェア というようなプログラムを開発しております。 その際、Javaを実行し、ハードウェアとリンクして、終了すると hs_err_pid0000.logというログファイルが生成され、困っております。 このログファイルを解析しようと思い、解析方法を調べましたが 答えが見つからず、自力で翻訳してやってみましたがほとんど意味不明で、困っております 大変初歩的な質問だとは思いますが、 解析する際は、何を見たら良いんでしょうか。 また、何がどうなってたら異常な状態なんでしょうか。 お恥ずかしい限りですが、宜しくお願い致します

  • JavaからCプログラムを結合

    JavaからCプログラム・またCプログラムからJavaを実行する方法を模索しております。JNIというのが見つかったのですが、これは、C→Javaでも可能なのでしょうか? また、各異言語にて他言語の処理を実行した場合、戻り値やOUTパラメータなどの引継ぎは可能なのでしょうか? JNI以外の方法含め、ご存知の方いらっしゃいましたらご教授宜しくお願い致します。

  • Java visualVM 何を監視すれば・・・

    こんにちわ visualVMについて質問がございます。 わかる方いらっしゃれば、ぜひご教授お願い致します。 現在、JavaのJNIを使用し、C++のプログラム(他社製dll)を呼び出すシステムを開発しております。 その中で、プログラムを実行し、VMが落ちることもなく順調に走らせ、 問題なく終了すると、プログラムと同じフォルダに hs_err_pid5368.logというものが生成されます。 終了するたび1つずつ増えていきます。 調べたところ、JavaのVMが異常終了したときにVMから生成されるものでした。 さらに調べたところ、メモリ管理の問題や、コーディングの問題、クラスデータ共有の問題であることだとインターネットにありました。 ですので、これらの問題を解決しようと、 プログラムを見直して書き換えたり ヒープを増やして実行したり dllに問題がないか問い合わせたり クラスデータ共有を無効にして実行したりしても、改善されません。 そこで、visualVMでVMを監視することにしましたが CPUのどこを見ればいいのか メモリの何がいけないのか スレッドの・・・ヒープの・・・(以下略) 何がどうなったらVMに悪影響が出るのか わかりかねております。 わかる方いらっしゃれば、どうかご教授宜しくお願い致します。

  • JAVAコンパイルと実行

    はじめまして。質問があります。 eclipseで開発したjavaのソースを実行するとき、メニューからメインクラスを指定し実行するだけでプログラム実行されますが、そのプログラムをコマンドプロンプトで実行する場合、できるプログラムとできないプログラム(例外:NoClassDefFoundError)があります。 コンパイルはeclipceのほうで勝手に.classファイルが生成されるので、そのclassファイルをjava [ファイル名]と打つだけだと思います。 実行できるプログラムとできないプログラムの違いは以下の通りです。 ・実行できるプログラム eclipseで新規でプロジェクトを作成。その直下にソースが存在し、クラスファイルも同じディレクトリに生成されます。 ・実行できないプログラム eclipseで新規でプロジェクトを作成。ソースフォルダ(src)を作成し、その下からパッケージ、クラスを作成しました。そうすると、エクスプローラでそのプロジェクトを見ると、binフォルダが生成されていました。その中にクラスファイルが生成されます。 違いはこのような感じです。実行できないプログラムをコマンドプロンプトで実行させるためにはどうしたらよいでしょうか?eclipseの使い方はだいぶわかってきたのですが、どのように動作しているか(java自体も)がわかりません。ご教授宜しくお願い致します。 OS:windows2000 開発環境:eclipse 3.0(J2SE 1.4.2_03)

    • ベストアンサー
    • Java
  • Javaの実行エラーが起きます。

    Javaの実行エラーが起きます。 Exception in thread "main" java.lang.UnsatisfiedLinkError: no nativetimer in java.library.pathの解決方法 現在、大学で研究をしており、その関係でネットからひろったJavaのプログラムを動かそうとしているのですが、実行すると上記のようなエラーにより実行できずに困っています。eclipseを使っています。何か解決方法があれば、教えてください。

    • ベストアンサー
    • Java
  • eclipse で JAVAもC++も開発したい

    C++をやっていて、最近JAVAもプログラムするようになったのですが、 JAVAで使うeclipseが非常に便利なので、これをC++で使えないかと思っています。 http://www.eclipse.org/downloads/ を見ると、JAVAを使うためのeclipseとC++を使うためのeclipseは別々に用意されているようなのですが、二つ eclipse をインストールするとディスクがもったいない気がします。 ● eclispe 一つで JAVAとC++の開発は出来ないのでしょうか?

    • ベストアンサー
    • Java
  • eclipse + WTPでライブラリパスが無効になる?

    Eclipse 3.1 + WTP 1.0でサーブレットを作成しています。 このサーブレットからJNIを使用して外部DLLを実行する という構成になっています。 (実際にはJBuilderからの移行で、サーブレット自体に 問題がある可能性は低いです) WTPを実行すると、Tomcat5.5が立ち上がり、サーブレットが 起動しようとするのですが、外部DLLがないというJavaの エラーが出てしまいます。(下記) 「java.lang.UnsatisfiedLinkError: no ライブラリ名 in java.library.path」 また、WTPプロジェクトではなく、Javaプロジェクトだと 同じJNI+DLLの構成でも正常に動作するのです。 このことから、Tomcatが実行したときに環境変数Pathが 無効になっているのではないかと推察しました。 そこで、eclispeのパッケージエクスプローラの「サーバー」 内の「Tomcat v5.5サーバー」で「構成と実行」を開いて 「環境」でPathを設定してみたのですが、うまくいきません。 「引数」でD引数を指定しても駄目なのです。 どなたか解決方法をご存知の方いらっしゃらないでしょうか。 よろしくお願いします。