Ошибка возврата функции graal_create_isolate: собственный образ GraalVM

Я хотел бы создать Java-код общей библиотеки (.dll) с помощью graalVM. Когда я использую общую библиотеку, созданную из Java-кода с помощью собственного изображения, результат выполнения успешен или не удался в зависимости от среды выполнения. Когда результат выполнения не удался, функция graal_create_isolate возвращает 23. Я хотел бы знать, как найти значение этого значения 23.

В заголовке, сгенерированном командой Native-image (graal_isolate.h), указано «ненулевое значение в случае сбоя», но значение каждого значения не записано в этом заголовке. Пожалуйста, может кто-нибудь мне помочь? большое спасибо.

[среда выполнения и результат]

  • Windows Server 2022 (версия: 21H2, сборка ОС: 20348.197) результат: ошибка
  • Windows Server 2022 (версия: 21H2, сборка ОС: 20348.469) результат: успех
  • Windows Server 2022 (версия: 21H2, сборка ОС: 20348.2227) результат: ошибка
  • Windows 10 Enterprise (версия: 22H2, сборка ОС: 19045.4412) результат: успех

[результат выполнения]

  • успех main.exe количество = 1234
  • ошибка main.exe ошибка инициализации (ret = 23)

[процесс сборки] javac Sample.java родное-изображение -o Пример --shared cl /I .\ .\main.c Sample.lib

[код]

  • Образец.java
import org.graalvm.nativeimage.IsolateThread;
import org.graalvm.nativeimage.c.function.CEntryPoint;
import org.graalvm.nativeimage.c.type.CCharPointer;
import org.graalvm.nativeimage.c.type.CTypeConversion;
public class Sample {
  @CEntryPoint(name = "getCount")
  private static int get_count(IsolateThread thread) {
    return 1234;
  }
}
  • main.c
#include <stdio.h>
#include <stdlib.h>
#include "Sample.h"
int main(void) {
  graal_isolate_t *isolate = NULL;
  graal_isolatethread_t *thread = NULL;
  int ret = graal_create_isolate(NULL, &isolate, &thread);
  if (ret != 0) {
    fprintf(stderr, "initialization error(ret = %d)\n", ret);
    return -1;
  }
  printf("count = %d\n", getCount(thread));
  if (graal_tear_down_isolate(thread) != 0) {
    fprintf(stderr, "shutdown error(ret = %d)\n", ret);
    return -1;
  }
  return 0;
}

[создать среду]

  • ГраальВМ граалвм-jdk-17.0.11+7.1
  • Видеостудия Визуальная Студия 2022 кл --версия Оптимизирующий компилятор Microsoft(R) C/C++ версии 19.36.32535 ​​для x64

Я ожидаю, что он будет работать в любой среде.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После внесения следующих изменений ошибка больше не возникает.

До:

javac Sample.java
native-image -o Sample --shared
cl /I .\ .\main.c Sample.lib

После:

javac Sample.java
native-image -o Sample --shared -march=compatibility
cl /I .\ .\main.c Sample.lib

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

Spring собственный kafka.common.KafkaException: не удалось найти общедоступный конструктор без аргументов для io.confluent.kafka.serializers.KafkaJsonSerializer
Изменяет ли использование режима быстрой сборки для тестов функциональность?
Как правильно передать --initialize-at-build-time, --trace-class-initialization в собственную компиляцию с использованием Maven и Spring Boot
Как создать оптимизированный для PGO собственный исполняемый файл для приложения Quarkus?
Сгенерированный Graalvm двоичный файл работает внутри каталога проекта, но не за его пределами
Spring Boot 3 Native — java.lang.ClassNotFoundException: org.springframework.boot.SpringApplicationAotProcessor
Как создать Spring Boot 3.0.6 REST API в работающий собственный образ?
Сбой компиляции Spring Boot NativeImage: «Не удалось найти целевой метод: частный org.springframework.boot.Banner»
Spring Boot Native: нет допустимых зависимостей для native-image-svm
Предоставьте системные свойства во время выполнения при создании собственного образа в Spring Boot 3