Temurin-build: تسببت الأحرف الصينية في المسار إلى java.exe في الخطأ "تعذر تحميل المكتبة الأصلية"

تم إنشاؤها على ٢٧ يناير ٢٠٢٠  ·  8تعليقات  ·  مصدر: adoptium/temurin-build

النظام الأساسي و: الهندسة المعمارية:
نظام التشغيل Windows10.0.18362
OpenJDK11U-jre_x64_windows_hotspot_11.0.6_10.zip
OpenJDK11U-jre_x86-32_windows_hotspot_11.0.6_10.zip

خطوات إعادة إظهار المشكلة:

  1. قم بتنزيل JRE الموضح أعلاه من https://adoptopenjdk.net/releases.html
  2. قم بفك ضغطه.
  3. أعد تسمية "jdk-11.0.6 + 10-jre" إلى "jdk 漢字 含 む" ("漢字 含 む" هي 4 أحرف صينية)
  4. قم بتنفيذ java.exe على النحو التالي:
$ jdk漢字含む\bin\java -version
Error occurred during initialization of VM
Unable to load native library:

$ ren jdk漢字含む jdk
$ jdk\bin\java -version
openjdk version "11.0.6" 2020-01-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.6+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.6+10, mixed mode)

jdk-11.0.5 + 10-jre لم يسبب الخطأ.
شكرا على الثنائيات الخاصة بك.

jdkissue2

Reported to OpenJDK / JBS bug

التعليق الأكثر فائدة

لقد أصلحت هذه المشكلة في jdk / jdk ، وتم jdk / jdk11u-dev . سيتم شحنها في 11.0.8. أعتقد أنه يمكنك استخدام تبنّي OpenJDK 11 على مسار CJK منذ 11.0.8.

ال 8 كومينتر

يبدو أن يكون هو نفسه مع الأحرف الكورية

تم الإبلاغ بواسطة مستخدم على تطبيقي ، jlink build مع jdk-11.0.6 + 10
image

نص الإطلاق في الصورة

<strong i="10">@echo</strong> off
set DIR="%~dp0"
set JAVA_EXEC="%DIR:"=%\java"
%JAVA_EXEC%  -p "%~dp0/../app" -m com.pmm.ParadoxosGameModManager/com.pmm.ParadoxosGameModManager.ModManager  %*

تحرير: تم اختباره أيضًا مع 11.0.5 ، تأكد من أنه يعمل

@ himawari-san هل يمكنك تجربة الإصدار 11.0.6 من appropenjdk.net/upstream.html من فضلك؟

@ karianna حصلت على نفس الخطأ.
شكرا لدعمك.

openjdk_ss

أعتقد أنه خطأ في المنبع. لقد أكدت هذه المشكلة على مصدر jdk / jdk الحالي. قد يحدث على أي مسار يحتوي على حرف (أحرف) CJK.

يمكنني إصلاحه باستخدام التصحيح على النحو التالي ، لذلك أريد إرسال طلب مراجعة لـ hotspot-runtime-dev في OpenJDK. هل سبق لك أن عملت مع مجتمع OpenJDK؟ إذا لم يكن الأمر كذلك ، فسوف أقوم بتقديمه إلى JBS.

diff --git a/src/hotspot/os/windows/os_windows.cpp b/src/hotspot/os/windows/os_windows.cpp
--- a/src/hotspot/os/windows/os_windows.cpp
+++ b/src/hotspot/os/windows/os_windows.cpp
@@ -4207,14 +4207,16 @@
     size_t prefix_len = wcslen(prefix);
     size_t full_path_size = is_abs ? 1 + buf_len : JVM_MAXPATHLEN;
     size_t result_size = prefix_len + full_path_size - prefix_off;
-    result = (wchar_t*) os::malloc(sizeof(wchar_t) * (additional_space + result_size), mtInternal);
+    size_t result_buffer_size = sizeof(wchar_t) * (additional_space + result_size);
+    result = (wchar_t*) os::malloc(result_buffer_size, mtInternal);

     if (result == NULL) {
       err = ENOMEM;
     } else {
-      size_t converted_chars;
+      ZeroMemory(result, result_buffer_size);
       wchar_t* path_start = result + prefix_len - prefix_off;
-      err = ::mbstowcs_s(&converted_chars, path_start, buf_len + 1, buf, buf_len);
+      int win32_ret = MultiByteToWideChar(CP_THREAD_ACP, MB_ERR_INVALID_CHARS, buf, (int)buf_len, path_start, (int)(buf_len + 1));
+      err = (win32_ret == 0) ? EINVAL : ERROR_SUCCESS;

       if ((err == ERROR_SUCCESS) && needs_fullpath) {
         wchar_t* tmp = (wchar_t*) os::malloc(sizeof(wchar_t) * full_path_size, mtInternal);

YaSuenag لا ، لم أفعل. أنا أقدر مساعدتك.

لقد أبلغت عن هذه المشكلة إلى JBS ، وأرسلت طلب مراجعة إلى hotspot-runtime-dev.

https://bugs.openjdk.java.net/browse/JDK-8240197
https://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2020-F February/038330.html

لقد أصلحت هذه المشكلة في jdk / jdk ، وتم jdk / jdk11u-dev . سيتم شحنها في 11.0.8. أعتقد أنه يمكنك استخدام تبنّي OpenJDK 11 على مسار CJK منذ 11.0.8.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات