エラーと「有効なWindowsイメージではない」というメッセージなしでエージェントをコンパイルします

StackOverflow https://stackoverflow.com/questions/6359953

質問

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コンパイラを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.80GHzでMicrosoft Windows XP Professionalバージョン2002サービスパック3を実行しています

そのシステムでごめんなさい。通常、MacBook Pro 2010(2.8GHz Intel Core i7)を使用していますが、MacOSにはJVMTIデモバージョンのサポートが含まれていないことがわかりました:(

誰かが私を助けてくれることを願っています。

挨拶マルカスG.

役に立ちましたか?

解決

上部バージョンの違いがどこにあるかはわかりませんが、このコマンドラインは、DLLファイルをライブラリにコピーすると(上記のシステムで)うまく実行されるエージェントを作成します(..java_home jre bin) :

VCVARS32
cd C:\Program Files\Java\jdk1.6.0_26\demo\jvmti\heapViewerByMG\src
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= /Op /Ox /Zi /Gy -DWIN32 /WX
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

次に、DLLファイルを上記のディレクトリにコピーし、次のコマンドラインを使用してテストを実行します。

C:\Program Files\Java\jdk1.6.0_26\demo\jvmti\heapViewerByMG\src>java -agentlib:h
eapViewerByMG -version
Compile Time JVMTI Version: 1.1.102 (0x30010166)
Run Time JVMTI Version: 1.2.1 (0x30010201)
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)

とにかく、私はまだわかりません、なぜこれが以前に機能しなかったのか... Markus G.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top