在cygwin上编译hsdis(Java热点反汇编程序插件)时,错误的reloc地址0x0

在cygwin上编译hsdis(Java热点反汇编程序插件)时,错误的reloc地址0x0,java,c,compilation,cygwin,jvm-hotspot,Java,C,Compilation,Cygwin,Jvm Hotspot,我正在尝试编译JVM反汇编JIT编译代码所需的hsdis-amd64.dll库 我听从了大家的回答 我安装了cygwin 下载 下载 我创建了如下文件夹结构: + +- hsdis // unzipped dir hotspot/src/share/tools/hsdis of openjdk zip +- binutils-2.24 // unzipped binutils-2.24.tar.gz 首先,我尝试使用以下方法编译它: $ make OS=Li

我正在尝试编译JVM反汇编JIT编译代码所需的
hsdis-amd64.dll

我听从了大家的回答

  • 我安装了cygwin
  • 下载
  • 下载
我创建了如下文件夹结构:

+
+- hsdis             // unzipped dir hotspot/src/share/tools/hsdis of openjdk zip
+- binutils-2.24     // unzipped binutils-2.24.tar.gz
首先,我尝试使用以下方法编译它:

$ make OS=Linux MINGW=x86_64-w64-mingw32 BINUTILS=../binutils-2.24
但它以失败告终

/Linux-amd64/opcodes/libopcodes.a build/Linux-amd64/libiberty/libiberty.a
hsdis.c:32:20: fatal error: sysdep.h: No such file or directory
#include <sysdep.h>
                ^
compilation terminated.
我遵循编译器的建议,在
errno.h
include之前添加了
config.h

那么错误是

e -I../binutils-2.24/bfd -Ibuild/Linux-amd64/bfd -DLIBARCH_amd64 -DLIBARCH=\"amd64\" -DLIB_EXT=\".dll\" -O hsdis.c -shared build/Linux-amd64/bfd/libbfd.a build/Linux-amd64/opcodes/libopcodes.a build/Linux-amd64/libiberty/libiberty.a
build/Linux-amd64/bfd/libbfd.a(compress.o):compress.c:(.text+0x15): undefined reference to `compressBound'
build/Linux-amd64/bfd/libbfd.a(compress.o):compress.c:(.text+0x48): undefined reference to `compress'
build/Linux-amd64/bfd/libbfd.a(compress.o):compress.c:(.text+0x28a): undefined reference to `inflateInit_'
build/Linux-amd64/bfd/libbfd.a(compress.o):compress.c:(.text+0x2c7): undefined reference to `inflate'
build/Linux-amd64/bfd/libbfd.a(compress.o):compress.c:(.text+0x2d6): undefined reference to `inflateReset'
build/Linux-amd64/bfd/libbfd.a(compress.o):compress.c:(.text+0x2f1): undefined reference to `inflateEnd'
/usr/lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw32/bin/ld: build/Linux-amd64/bfd/libbfd.a(compress.o): bad reloc address 0x0 in section `.pdata'
collect2: error: ld returned 1 exit status
我知道这是一个链接器问题。对我来说,这似乎是试图链接到一个错误的版本,但我可能是错的


有没有人知道如何解决这个问题,或者可以告诉我如何编译hsdis(热点反汇编插件)?

这个问题可以按照Marat Buharov的回答来解决

不过,这里有一些链接,您可以在其中找到预先制作好的hsdis插件:


我试过使用jdk1.7.0_02,效果很好。

需要添加针对zlib的链接(请确保在cygwin中安装程序包mingw64-x86_64-zlib)。

然后在编辑器中打开Makefile,查找规则:

$(TARGET): $(SOURCE) $(LIBS) $(LIBRARIES) $(TARGET_DIR)
    $(CC) $(OUTFLAGS) $(CPPFLAGS) $(CFLAGS) $(SOURCE) $(DLDFLAGS) $(LIBRARIES)
将“-static-lz”添加到第二行,使其:

$(TARGET): $(SOURCE) $(LIBS) $(LIBRARIES) $(TARGET_DIR)
    $(CC) $(OUTFLAGS) $(CPPFLAGS) $(CFLAGS) $(SOURCE) $(DLDFLAGS) $(LIBRARIES) -static -lz

您需要在cygwin中安装程序包mingw64-x86_64-zlib。您需要在cygwin控制台中安装mingw64-x86_64-zlib(您的屏幕截图上与zlib-devel不匹配)检查“ls/usr/x86_64-w64-mingw32/sys root/mingw/lib/libz.*”。那里(如果zlib for Win64 toolchain安装正确的话)必须有两个文件:libz.a和libz.dll.aThanks,现在在我做了一个
make clean
之后,它可以完美地编译。
$(TARGET): $(SOURCE) $(LIBS) $(LIBRARIES) $(TARGET_DIR)
    $(CC) $(OUTFLAGS) $(CPPFLAGS) $(CFLAGS) $(SOURCE) $(DLDFLAGS) $(LIBRARIES) -static -lz