windows8 手动编译Hsdis

为什么要写这篇博客呢?在《深入理解java虚拟机》一书中,了解到hsdis这个工具,但是由于网上提供的支持windows的,要么是手动编译,要么要分。恰好分不够了,另外也想亲自手动编译下。当然,还有一个最重要的原因,根据在64位Windows上编译hsdis操作下来,遇到些问题,在这里记录下来。下面记录下我的手动编译hsdis的历程:

 一、软件准备:

        1.下载安装Cygwin(windows-64)

        2.GNU-binutils安装(2.27)

        3.OPEN-JDK源码下载

二、安装Cygwin 

        1.Select Packages页面需要注意,在默认的基础上,需要额外安装的package有:
            Devel - gcc-core 
            Devel - make
            Devel - mingw64-x86_64-gcc-core
            Devel - mingw64-x86_64-gcc-g++
            Devel - texinfo

            Utils - diffutils

        2.修改Cygwin安装根目录下面的Cygwin.bat文件,在"D:"与"chdir"之间增加

          (其中D:\Cygw修改为自己Cygwin的安装根 目录):

        set CYGWIN=tty notitle glob

set PATH=%PATH%;D:\Cygw\bin;D:\Cygw\sbin;D:\Cygw\usr\bin;D:\Cygw\usr\sbin;D:\Cygw\usr\local\bin

                 set LD_LIBRARY_PATH=D:\Cygw\lib;D:\Cygw\usr\lib;D:\Cygw\usr\local\lib

三、安装完之后启动Cygwin,则会在Cygwin的安装目录下的home下自动生成你的用户名命名的文件夹(下文记之为~

四、将下载的binutils解压到~下 

     .../home/用户名/binutils-2.27/

五、解压hsdis源码

        1.将下载的openJDK源码/src/share/tools/hsdis解压到~下 

      .../home/用户名/hsdis/

六、修改Makefile文件

  1. 修改~/hsdis/Makefile文件,搜索LIBRARIES,将 
    LIBRARIES = $(TARGET_DIR)/bfd/libbfd.a \ 
    $(TARGET_DIR)/opcodes/libopcodes.a \ 
    $(TARGET_DIR)/libiberty/libiberty.a
     
    修改为 
    LIBRARIES = $(TARGET_DIR)/bfd/libbfd.a \ 
    $(TARGET_DIR)/zlib/libz.a \ 
    $(TARGET_DIR)/opcodes/libopcodes.a \ 
    $(TARGET_DIR)/libiberty/libiberty.a
     
    保存
七、执行编译命令
  1. 在Cygwin窗口输入cd ~/hsdis
  2. 然后输入命令make OS=Linux MINGW=x86_64-w64-mingw32 'AR=$(MINGW)-ar' BINUTILS=~/binutils-2.27
  3. (最后的binutils路径需要与实际安装路径一致)
八、等待结果
  1. 等待几分钟,如果最后没有报错,那么就build成功了,我们需要的hsdis-amd64.dll现在就在~/hsdis/build/Linux-amd64里面了,  

           把它copy到$JAVA_HOME/jre/bin/server(或$JAVA_HOME/jre/bin/client)下就OK了。

       2.如果执行失败而且如果发现command not found,可以重新执行Cygwin安装文件,

        之后在select page页选择需要的安装包,重新执行步骤七

参考文章:

     1.在64位Windows上编译hsdis

      2. cygwin 命令显示无法找到的解决办法与目录切换






你可能感兴趣的:(windows8 手动编译Hsdis)