如何为Windows 32位构建hsdis.dll?

时间:2015-11-24 20:33:20

标签: dll cygwin

我正在尝试在我的笔记本电脑32位Windows中构建hsdis.dll。我阅读了http://dropzone.nfshost.com/hsdis.htm条说明,并了解到我必须遵循这些步骤。我看到我必须使用mingw64-i686-gcc-core。我按照步骤操作,但总是发现这个错误。

make[2]: i686-w64-mingw32: Command not found
Makefile:246: recipe for target 'libiberty.a' failed
make[2]: *** [libiberty.a] Error 127
make[2]: Leaving directory '/home/User/hsdis/build/Linux-i586/libiberty'
Makefile:8045: recipe for target 'all-libiberty' failed
make[1]: *** [all-libiberty] Error 2
make[1]: Leaving directory '/home/User/hsdis/build/Linux-i586'
Makefile:192: recipe for target 'build/Linux-i586/bfd/libbfd.a' failed
make: *** [build/Linux-i586/bfd/libbfd.a] Error 2

我还想知道如何使用指令PrintAssembly,因为我想查看Java类的汇编代码。

我已经在这里看到了其他帖子,但没有一个帮助过。

提前致谢

1 个答案:

答案 0 :(得分:0)

以下是帮助我构建它的步骤(x64版本,x86应该几乎相同):

  • 按照http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/tags;
  • 中的建筑手册中的说明下载并解压缩最新的hsdis来源
  • http://mirror.tochlab.net/pub/gnu/binutils/;
  • 下载最新的bintuils-2.26.tar.gz
  • 将其复制到您的Cygwin主目录并从Cygwin终端解压缩(这非常重要,否则您可能会遇到权限问题): tar -xzvf ./binutils-2.26.tar.gz
  • 安装以下Cygwin软件包:x64为mingw64-x86_64-gcc-core,x86为mingw64-i686-gcc-corediffutilsmake;
  • 转到hsdis目录;
  • 用于x64库构建,使用以下命令:make OS=Linux MINGW=x86_64-w64-mingw32 'AR=x86_64-w64-mingw32-ar' BINUTILS=~/binutils-2.26 CONFIGURE_ARGS="--host=x86_64-w64-mingw32",使用以下命令进行x86库构建:make OS=Linux MINGW=i686-w64-mingw32 'AR=i686-w64-mingw32-ar' BINUTILS=~/binutils-2.26 CONFIGURE_ARGS="--host=i686-w64-mingw32"
  • 如果您对zlib的未定义引用有错误(例如build/Linux-amd64/bfd/libbfd.a(compress.o):compress.c:(.text+0x7e): undefined reference to inflate),请修改Makefile中的hsdis:找到$(CC) $(OUTFLAGS) $(CPPFLAGS) $(CFLAGS) $(SOURCE) $(DLDFLAGS) $(LIBRARIES)的行$(TARGET) 1}} target并追加到末尾-lz -L$(TARGET_DIR)/zlib,然后再次运行build命令;
  • 之后,您应该在hsdis-amd64.dll中找到x64的库hsdis\build\Linux-amd64\,或者在hsdis-i386.dll中找到x86的hsdis\build\Linux-i586\