Я пытаюсь скомпилировать библиотеку hsdis-amd64.dll
, которая нужна JVM для дизассемблирования скомпилированного JIT-кода.
Я последовал этому принятому ответу.
- я установил сигвин
- загружен openjdk-7u40 -fcs-src-b43-26_aug_2013.zip
- и скачал binutils-2.24.tar. gz
Я создал такую структуру папок:
+
+- 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.
Поэтому я применил патч, предоставленный в этот принятый ответ и попробовал снова.
Компиляция снова не удалась
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)?