Сборка 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 ответ
Для сборки JDK требуется как минимум GCC 5.0 (см. Сборка JDK: CC).
Кажется, это проблема в версии glibc (см. redhat-issue, util-linux). Таким образом, обновление вашего glibc до последней версии может решить эту проблему.
Если вы не хотите обновлять glibc вашей системы, вот еще одна альтернатива:
Глядя на справочную страницу fallocate , мы обнаруживаем, что в описании упоминается, что posix_fallocate(3) является переносимой версией, указанной в POSIX.1, в случае, если параметр имеет значение по умолчанию (0). То же самое относится к
fallocate64
. Поскольку все вхождения вышеупомянутой ошибки уже используют значение по умолчанию, вы можете заменить их на
posix_fallocate64()
(вместо того, чтобы комментировать их, как вы упомянули в другом комментарии).
Обозначенная справочная страница говорит, что:
Это поведение по умолчанию [из
fallocate
сmode
=0] очень напоминает поведение библиотечной функции posix_fallocate(3) и предназначен для оптимальной реализации этой функции.