2014-01-10 31 views
4

我正在編譯JVM需要反編譯JIT編譯代碼的hsdis-amd64.dll庫。在cygwin上編譯hsdis(Java HotSpot反彙編程序插件)時出現錯誤的重定位地址0x0

我跟着this接受的答案。

我創建了一個文件夾結構是這樣的:

+ 
+- 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. 

所以我應用於this accepted answer提供的補丁,並再次嘗試。

編譯再次

In file included from hsdis.c:34:0: 
build/Linux-amd64/bfd/bfd.h:35:2: error: #error config.h must be included before this header 
#error config.h must be included before this header 
^ 

失敗我跟着編譯器的建議,並加入config.h之前的errno.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(HotSpot反彙編程序插件)?

回答

2

需要添加鏈接以防止zlib(請確保您在cygwin中安裝了軟件包mingw64-x86_64-zlib)。 correct zlib package for x86_64

然後在編輯器中打開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 
+0

你需要安裝包mingw64-x86_64的-zlib在cygwin中。 –

+0

我剛更新了我的答案。 –

+0

我編譯了hsdis-amd64.dll,效果很好。 –