2011-06-15 31 views
2

自一周以来我试图编译JVMTI演示集的演示版本。在这种情况下,我尝试编译HeapViewer源代码(我刚将文件HeapViewer.c重命名为HeapViewerByMG)。我尝试了不同的编译器和使用的主要有以下代码,我在计算器上找到,太:编译一个没有错误的代理和“无效Windows映像”的消息

// 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文件,我将获得以下错误:

"The application or DLL (...)\heapViewerByMG.dll is not a valid Windows image. Please check this against your installation diskette."

我也查了这个消息的含义。研究告诉我,这是一个腐败的文件,但是我可以排除这一点,因为我已经通过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. 

或之后,我改变了微软编译器从64位到32位(因为这是旧的错误消息之一,当我开始代理)

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. 

而且我运行Microsoft Windows XP专业版2002年服务于英特尔(R)Pack 3的4 CPU 2.80GHz的2.00 GB的RAM

对不起,该SYST EM。通常我使用的是MacBook Pro 2010(2.8GHz Intel Core i7),但是我发现MacOS没有包含JVMTI演示版本的支持:(

我希望有人能帮助我。

问候 马库斯·G.

回答

1

我不知道在哪里的差异上的版本,但这个命令行创建一个运行良好的代理人(上提到的系统上),如果复制的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) 

无论如何,我仍然不知道,为什么没有早点工作... 马库斯·g^。

相关问题