Нарушение прав доступа при вызове j9port_startup_library

Я собрал openj9 для Windows, используя следующие инструкции: https://github.com/eclipse/openj9/blob/master/buildenv/Build_Instructions_V8.md#windows

Когда я пытаюсь следующий код (Visual Studio 2017):

J9PortLibraryVersion portver;
J9PORT_SET_VERSION(&portver, J9PORT_CAPABILITY_MASK);

J9PortLibrary *portlib;
int32_t rc = j9port_allocate_library(&portver, &portlib);
if (rc != 0)
{
    printf("j9port_allocate_library failed with: %d\n", rc);
    return 1;
}

rc = j9port_create_library(portlib, &portver, sizeof(J9PortLibrary));
if (rc != 0)
{
    printf("j9port_create_library failed with %d\n", rc);
    return 1;
}

rc = j9port_startup_library(portlib);
if (rc != 0)
{
    printf("j9port_startup_library failed with %d\n", rc);
    return 1;
}
printf("j9port_startup_library: %d\n", rc);

Я получаю нарушение прав доступа на j9port_startup_library: Exception thrown at 0x00007FFF0FC9430A (j9thr29.dll) in sample.exe: 0xC0000005: Access violation reading location 0x0000000000000000.

Проверка portlib показывает, что portGlobals NULL что я не думаю, что это должно быть. https://i.stack.imgur/

Когда я запускаю exe вне отладчика, я вижу следующие утверждения (которые я почему-то не вижу в отладчике):

** ASSERTION FAILED ** j9prt.504 в общем /j9port.c:404 Assert_PRT_true((omrthread_self()!= ((Void *) 0)))

** ASSERTION FAILED ** omrport.0 в../../omr/port/common/omrport.c:515 Assert_PRT_true((omrthread_self()!= ((Void *) 0)))

Я пропускаю шаг или что является причиной нарушения прав доступа?

РЕДАКТИРОВАТЬ: я перестроить проект на Windows 7 x64 с Visual Studio 2010 и побежал выше MCE в VS2010, VS показывает мне, что мы терпим крах в

omrthread.c

static omrthread_monitor_t
monitor_allocate(omrthread_t self, intptr_t policy, intptr_t policyData)
{
   omrthread_monitor_t newMonitor;
   omrthread_library_t lib = self->library;

self равно нулю, и поэтому создается ACCESS_VIOLATION: снимок экрана .com/MMW59.png

1 ответ

Это было задано в проекте Github Eclipse OpenJ9: https://github.com/eclipse/openj9/issues/1564

Ответ был для инициализации библиотеки портов следующим образом:

int main(int argc, char **argv) {
    omrthread_t attachedThread = NULL;
    J9PortLibraryVersion portver;
    J9PortLibrary portlib;
    intptr_t rc;
    intptr_t fd;

    rc = omrthread_init_library();
    if (rc != 0) {
        printf("omrthread_init_library failed with: %lld\n", rc);
        return 1;
    }

    rc = omrthread_attach_ex(&attachedThread, J9THREAD_ATTR_DEFAULT);
    if (rc != 0) {
        printf("omrthread_attach_ex failed with: %lld\n", rc);
        return 1;
    }

    J9PORT_SET_VERSION(&portver, J9PORT_CAPABILITY_MASK);
    rc = j9port_init_library(&portlib, &portver, sizeof(portlib));
    if (rc != 0) {
        printf("j9port_init_library failed with: %lld\n", rc);
        return 1;
    }
Другие вопросы по тегам