1 週間以来、私は JVMTI デモ セットのデモ バージョンをコンパイルしようとしています。この場合、HeapViewer のソース コードをコンパイルしようとしました (HeapViewer.c ファイルの名前を HeapViewerByMG に変更しました)。別のコンパイラを試し、stackOverflow で見つけた次のコードを主に使用しました。
// compile with Microsoft Windows C++ compiler
set JAVA_HOME="C:\Program Files\Java\jdk1.6.0_26"
set JVMTI_DEMO=%JAVA_HOME%\demo\jvmti
set AGENT_SRC=%JVMTI_DEMO%\agent_util\src
set CRW_SRC=%JVMTI_DEMO%\java_crw_demo\src
set CFLAGS=/MD /Zi /Ox /Os /Gy /c
cl %CFLAGS% /I%AGENT_SRC% %AGENT_SRC%\agent_util.c /I%CRW_SRC% /I%JAVA_HOME%\include /I%JAVA_HOME%\include\win32
cl %CFLAGS% /I%CRW_SRC% /I%JAVA_HOME%\include /I%JAVA_HOME%\include\win32 %CRW_SRC%\java_crw_demo.c
cl %CFLAGS% /I%AGENT_UTIL% /I%CRW_SRC% /I%JAVA_HOME%\include /I%AGENT_SRC% /I%JAVA_HOME%\include\win32 heapViewerByMG.c
link -dll -out:heapViewerByMG.dll heapViewerByMG.obj java_crw_demo.obj agent_util.obj
// compile with g++ compiler von MINGW
set JAVA_HOME="C:\Program Files\Java\jdk1.6.0_26"
set JVMTI_DEMO=%JAVA_HOME%\demo\jvmti
set AGENT_SRC=%JVMTI_DEMO%\agent_util\src
set CRW_SRC=%JVMTI_DEMO%\java_crw_demo\src
gcc -c -I%AGENT_SRC% %AGENT_SRC%\agent_util.c -I%CRW_SRC% -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32
gcc -c -I%CRW_SRC% -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 %CRW_SRC%\java_crw_demo.c
gcc -c -o heapViewerByMG.dll -I%AGENT_UTIL% -I%AGENT_SRC% -I%CRW_SRC% -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 heapViewerByMG.c
コードはどちらの場合も正常にコンパイルされますが、dll ファイルを使用しようとすると、次のエラーが発生します。
「アプリケーションまたは DLL (...)\heapViewerByMG.dll は有効な Windows イメージではありません。これをインストール ディスクと照合してください。」
このメッセージの意味も調べました。調査によると、これは破損したファイルですが、JVM によって特定のソース コードをコンパイルしたため、これを除外できます。とにかく、ファイルを正常に実行させるために必要なのは、別のオプションコマンドだと思います。あなたの誰かがアイデアを持っていますか?
私のシステムの詳細は次のとおりです。
C:\>java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
C:\>gcc --version gcc (GCC) 4.5.2 Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
C:\>cl -version
Microsoft (R) C/C++ Optimizing Compiler Version 14.00.50727.762 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
または、Microsoft Compiler を 64 ビットから 32 ビットに変更した後 (エージェントを起動したときの古いエラー メッセージの 1 つだったため)
C:\>VCVARS32
C:\>"C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"
Setting environment for using Microsoft Visual Studio 2005 x86 tools.
C:\>cl -version
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
そして、2.00 GB の RAM を搭載した Intel(R) 4 CPU 2.80 GHz で Microsoft Windows XP Professional バージョン 2002 Service Pack 3 を実行しています。
あのシステムでごめんなさい。通常、私は MacBook Pro 2010 (2.8GHz Intel Core i7) を使用していますが、MacOS には JVMTI デモ版のサポートが含まれていないことがわかりました :(
誰かが私を助けてくれることを願っています。
こんにちは、マーカス G.