Сборка OpenJDK 9 в CentOS5

Я пытался собрать OpenJDK 9 в Centos 5. Я использовал

sh ./configure --disable-warnings-as-errors
make all

Я получаю следующую ошибку.

Building target 'all' in configuration 'linux-x86_64-normal-server-release'
/root/jdk9/build/linux-x86_64-normal-server- 
release/support/native/java.base/libjava/io_util_md.o: In function 
`handleSetLength':
/root/jdk9/jdk/src/java.base/unix/native/libjava/io_util_md.c:228: 
undefined reference to `fallocate64'
collect2: ld returned 1 exit status
/usr/bin/objcopy: '/root/jdk9/build/linux-x86_64-normal-server- 
release/support/modules_libs/java.base/libjava.so': No such file
gmake[3]: *** [/root/jdk9/build/linux-x86_64-normal-server- 
release/support/modules_libs/java.base/libjava.so] Error 1
gmake[2]: *** [java.base-libs] Error 2

ERROR: Build failed for target 'all' in configuration 'linux-x86_64-normal- 
server-release' (exit code 2)

=== Output from failing command(s) repeated here ===
* For target support_native_java.base_libjava_BUILD_LIBJAVA_link:
/root/jdk9/build/linux-x86_64-normal-server- 
release/support/native/java.base/libjava/io_util_md.o: In function 
`handleSetLength':
/root/jdk9/jdk/src/java.base/unix/native/libjava/io_util_md.c:228: 
undefined reference to `fallocate64'
collect2: ld returned 1 exit status

* All command lines available in /root/jdk9/build/linux-x86_64-normal- 
server-release/make-support/failure-logs.
=== End of repeated output ===

No indication of failed target found.
Hint: Try searching the build log for '] Error'.
Hint: See common/doc/building.html#troubleshooting for assistance.

make[1]: *** [main] Error 2
make: *** [all] Error 2

Я также пробовал другие цели make, такие как make images и make install. Но все равно получаю ту же ошибку. Моя версия GCC - gcc (GCC) 4.4.7, которую я установил вручную, потому что Centos 5 по умолчанию имеет более старую версию.

1 ответ

  1. Для сборки JDK требуется как минимум GCC 5.0 (см. Сборка JDK: CC).

  2. Кажется, это проблема в версии glibc (см. redhat-issue, util-linux). Таким образом, обновление вашего glibc до последней версии может решить эту проблему.

  3. Если вы не хотите обновлять glibc вашей системы, вот еще одна альтернатива:

Глядя на справочную страницу fallocate , мы обнаруживаем, что в описании упоминается, что posix_fallocate(3) является переносимой версией, указанной в POSIX.1, в случае, если параметр имеет значение по умолчанию (0). То же самое относится к fallocate64. Поскольку все вхождения вышеупомянутой ошибки уже используют значение по умолчанию, вы можете заменить их на posix_fallocate64()(вместо того, чтобы комментировать их, как вы упомянули в другом комментарии).

Обозначенная справочная страница говорит, что:

Это поведение по умолчанию [из fallocateс mode=0] очень напоминает поведение библиотечной функции posix_fallocate(3) и предназначен для оптимальной реализации этой функции.

Другие вопросы по тегам