- - PR -
JVMPIについて
1|2|3|4|5
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-10-21 16:10
今、JVMPIについて学習している者です。
Javaプログラムによってロードされるすべてのクラスをトレースする myprofiler.cpp(java.sun.comのサンプルコード)を Makefileを用いて コンパイルするのがうまくいきません。 myprofiler.cpp、Makefileのコードとエラーの内容は以下です。 [環境] JDK:j2sdk1.4 コンパイラ:MinGW(eclipseプラグインを利用してeclipse上でコンパイル) ---------------------myprofiler.cc-------------------------- #include <jvmpi.h> // global jvmpi interface pointer static JVMPI_Interface *jvmpi_interface; // function for handling event notification void notifyEvent(JVMPI_Event *event) { switch(event->event_type) { case JVMPI_EVENT_CLASS_LOAD: fprintf(stderr, "myprofiler> Class Load : %s\\\\n", event->u.class_load.class_name); break; } } // profiler agent entry point extern "C" { JNIEXPORT jint JNICALL JVM_OnLoad(JavaVM *jvm, char *options, void *reserved) { fprintf(stderr, "myprofiler> initializing ..... \\\\n"); // get jvmpi interface pointer if ((jvm->GetEnv((void **)&jvmpi_interface, JVMPI_VERSION_1)) < 0) { fprintf(stderr, "myprofiler> error in obtaining jvmpi interface pointer\\\\n"); return JNI_ERR; } // initialize jvmpi interface jvmpi_interface->NotifyEvent = notifyEvent; // enabling class load event notification jvmpi_interface->EnableEvent(JVMPI_EVENT_CLASS_LOAD, NULL); fprintf(stderr, "myprofiler> .... ok \\\\n\\\\n"); return JNI_OK; } } -----------------------Makefile(最初の数字は行番号)------------------------- 1:JDK_HOME = C:\\\\j2sdk1.4 2: 3:INCLUDES = -I. -I$(JDK_HOME)\\\\include -I$(JDK_HOME)\\\\include\\\\win32 4: 5:SRC_DIR = . 6: 7:all: myprofiler.dll 8: 9:myprofiler.dll: $(SRC_DIR)\\\\myprofiler.cpp 10: cl -LDd -Zi -Zp1 $(INCLUDES) -Tp$(SRC_DIR)\\\\myprofiler.cpp -o $@ /link /libpath:"C:\\\\j2sdk1.4\\\\lib" jvm.lib 11: 12: 13:clean: 14: del *.lib 15: del *.dll 16: del *.ilk 17: del *.pdb 18: del *.obj 19: del *.exp ----------------エラー------------------ *** multiple target pattern. Stop 10行目でエラーが出ているみたいです。 よろしくお願いします。 _________________ 学生 | ||||||||
|
投稿日時: 2003-10-21 16:53
こんにちは、さくらばです。
Visual C++ もしくは VisualStdio を持っていますか? cl というのはコマンドラインの VC++ のコンパイラなのです。 もし、持っていなかったら GCC かなにかをインストールして、 Makefile をそれにあわせて書き換える必要があります。 | ||||||||
|
投稿日時: 2003-10-21 17:39
これ、10行目の先頭がTAB以外になっているのが原因でしょう。 ここはTABでなくてはなりません。 あと、MinGWならC++コンパイラはclではなく、g++になると思います。 コマンドラインオプションも変更する必要があります。 (今回はDLLを作るので-sharedが必要) | ||||||||
|
投稿日時: 2003-10-21 18:06
Visual C++も使ってみようと考えていますが、できれば MinGWコンパイラを使いたいです。
以下のようなページがありました。 http://www.gnu.org/manual/make/html_chapter/make_toc.html Makefileについてほとんど知識がないため、勉強する必要がありますね。 何かアドバイスがありましたら、よろしくお願いします。 _________________ 学生 | ||||||||
|
投稿日時: 2003-10-21 19:45
ちいにぃさんの書き込み (2003-10-21 17:39) より:
以下のようなMakefileにしてみたら、myprofiler.dllを作ることができました。 --------------------------Makefile------------------------------ JDK_HOME = C:\j2sdk1.4 INCLUDES = -I. -I$(JDK_HOME)\include -I$(JDK_HOME)\include\win32 SRC_DIR = . all : myprofiler.dll myprofiler.dll: myprofiler.cpp gcc -shared $(INCLUDES) myprofiler.cpp -o $@ .PHONY: clean clean: del *.dll ---------------------------------------------------------------- しかし実際に、C:\j2sdk1.4\jre\bin\client にmyprofiler.dllファイルをおき _________________ 学生 | ||||||||
|
投稿日時: 2003-10-21 19:46
失礼いたしました。
ちいにぃさんの書き込み (2003-10-21 17:39) より:
以下のようなMakefileにしてみたら、myprofiler.dllを作ることができました。 --------------------------Makefile------------------------------ JDK_HOME = C:\j2sdk1.4 INCLUDES = -I. -I$(JDK_HOME)\include -I$(JDK_HOME)\include\win32 SRC_DIR = . all : myprofiler.dll myprofiler.dll: myprofiler.cpp gcc -shared $(INCLUDES) myprofiler.cpp -o $@ .PHONY: clean clean: del *.dll ---------------------------------------------------------------- しかし実際に、C:\j2sdk1.4\jre\bin\client にmyprofiler.dllファイルをおき % java -Xrunmyprofiler クラス名 としても Error occurred during initialization of VM Could not find JVM_OnLoad function in -Xrun library: myprofiler とエラーメッセージが返ってきます。 何か設定がおかしいのでしょうか。 よろしくお願いします。 _________________ 学生 [ メッセージ編集済み 編集者: がっさん 編集日時 2003-10-21 19:47 ] | ||||||||
|
投稿日時: 2003-10-21 20:49
C:\j2sdk1.4\jre\bin\client
にちゃんと%PATH%環境変数通していますよね? (もしくはカレントにしているか) であれば, dumpbin /exports myprofiler.dll で,JVM_OnLoad関数がちゃんとEXPORTされているか 確認してみるといいかも。 | ||||||||
|
投稿日時: 2003-10-21 22:00
こんにちは、さくらばです。
C:\j2sdk1.4\jre\bin\client におかないで、PATH の通っているところに おけば大丈夫だと思います。 # C:\j2sdk1.4\jre\bin\client におく理由はあまりないと思うんですが... # jvm.dll と一緒にしておく必要はないです ところで、JVMPI って使いたい人多いのでしょうか。Web で解説を書こうか どうしようか迷っているのです。 参考 (Flash が必要です) http://www5.airnet.ne.jp/sakuraba/java/publication/20030414-JIAE-Seminar/20030414JIAE-profiler.html |
1|2|3|4|5
次のページへ»