Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编译一个没有错误的代理,并显示消息;无效的Windows映像";_Windows_Dll_Windows Xp_Compilation_Jvmti - Fatal编程技术网

编译一个没有错误的代理,并显示消息;无效的Windows映像";

编译一个没有错误的代理,并显示消息;无效的Windows映像";,windows,dll,windows-xp,compilation,jvmti,Windows,Dll,Windows Xp,Compilation,Jvmti,一个星期以来,我一直在尝试编译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_

一个星期以来,我一直在尝试编译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位之后(因为这是我启动代理时出现的较早错误消息之一)

我正在英特尔(R)4处理器2.80GHz和2.00GB内存上运行Microsoft Windows XP Professional Version 2002 Service Pack 3

对不起,那个系统。通常我使用的是MacBook Pro 2010(2.8GHz Intel Core i7),但我发现MacOS没有支持JVMTI演示版:(

我希望有人能帮助我

问候
Markus G.

我不知道与更高版本的区别在哪里,但如果您将dll文件复制到库中(…JAVA_HOME\JRE\BIN),此命令行将创建一个运行良好的代理(在上面提到的系统上):

现在,将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

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
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)