Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Could not instantiate org.graalvm.nativeimage.Platform$DARWIN_AMD64 #477

Open
RealThanhpv opened this issue Jul 1, 2023 · 24 comments
Open

Comments

@RealThanhpv
Copy link

Hi I am not sure this the plugin or graalvm

MacOs Monterey, Intel Corei5


[Sat Jul 01 21:08:17 ICT 2023][INFO] We will now compile your code for x86_64-apple-darwin. This may take some time.
[Sat Jul 01 21:08:20 ICT 2023][INFO] [SUB] Warning: Ignoring server-mode native-image argument --no-server.
[Sat Jul 01 21:08:21 ICT 2023][INFO] [SUB] WARNING: package com.oracle.truffle.api.impl.asm.tree.analysis not in org.graalvm.truffle
[Sat Jul 01 21:08:21 ICT 2023][INFO] [SUB] Error: Could not instantiate platform class org.graalvm.nativeimage.Platform$DARWIN_AMD64. Ensure the class is not abstract and has a no-argument constructor.
@RealThanhpv RealThanhpv changed the title Could not instantiate p org.graalvm.nativeimage.Platform$DARWIN_AMD64 Could not instantiate org.graalvm.nativeimage.Platform$DARWIN_AMD64 Jul 1, 2023
@RealThanhpv
Copy link
Author

RealThanhpv commented Jul 10, 2023

This can be fix by explicitly targeting org.graalvm.nativeimage.Platform$DARWIN_MACOS (my machine)

@SaptarshiSarkar12
Copy link

@jperedadnr I am facing the same issue while building native executable for a JavaFX app on macOS platform.
The GitHub Actions Workflow file can be found here and the Actions logs are here.
Please fix this error as soon as possible.

@SaptarshiSarkar12
Copy link

This can be fix by explicitly targeting org.graalvm.nativeimage.Platform$DARWIN_MACOS

@RealThanhpv It did not work for me. Am I making any mistake?
Please check the pom.xml file of my project and let me know if you can help me fix the error.

@RealThanhpv
Copy link
Author

I do not like my solution, it is a kind of hard-code, and that is for my specific machine (arch). However you may miss the dependency of org.graalvm.sdk. You my need to choose the right one for you machine from org.graalvm.nativeimage.Platform.*

@SaptarshiSarkar12
Copy link

I do not like my solution, it is a kind of hard-code, and that is for my specific machine (arch). However you may miss the dependency of org.graalvm.sdk. You my need to choose the right one for you machine from org.graalvm.nativeimage.Platform.*

@RealThanhpv Okay, so, I am using GitHub actions to perform the build process and it has x86_64 architecture and runs macOS 12 with XCode 14. but, how do I specify the right one for this runner from org.graalvm.nativeimage.Platform.*?

@RealThanhpv
Copy link
Author

RealThanhpv commented Aug 14, 2023

I meant the target machine is my local machine so the arch is specific so I can hard-code. You are building with GitHub action on remote machine, I do not know how to be specific about the arch there but only os. I think you should get it succeed on local machine first.

@SaptarshiSarkar12
Copy link

I meant the target machine is my local machine so the arch is specific so I can hard-code. You are building with GitHub action on remote machine, I do not know how to know the arch there but only os.

@RealThanhpv I mentioned that the macOS runner is having x86_64 architecture. So, isn't there any solution for that kind of machine?
Also, I am not having a mac with that same architecture. So, I can't even predict what might be the solution.
Even the documentation does not specify about this error 😩 .

@RealThanhpv
Copy link
Author

You may put these deps and try again with the hard-code of org.graalvm.nativeimage.Platform$DARWIN_MACOS

I not currently building on Mac, I got it built a few months ago.

<!-- https://mvnrepository.com/artifact/org.graalvm.nativeimage/library-support -->
<dependency>
    <groupId>org.graalvm.nativeimage</groupId>
    <artifactId>library-support</artifactId>
    <version>23.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.graalvm.sdk/graal-sdk -->
<dependency>
    <groupId>org.graalvm.sdk</groupId>
    <artifactId>graal-sdk</artifactId>
    <version>23.0.1</version>
</dependency>

@RealThanhpv
Copy link
Author

I followed the error to find this info, may be helpful for you:

module org.graalvm.sdk {
    requires java.logging;
    exports com.oracle.svm.core.annotate;
    exports org.graalvm.collections;
    exports org.graalvm.home;
    exports org.graalvm.home.impl;
    exports org.graalvm.nativeimage;
    exports org.graalvm.nativeimage.c;
    exports org.graalvm.nativeimage.c.constant;
    exports org.graalvm.nativeimage.c.function;
    exports org.graalvm.nativeimage.c.struct;
    exports org.graalvm.nativeimage.c.type;
    exports org.graalvm.nativeimage.hosted;
    exports org.graalvm.nativeimage.impl to com.oracle.svm.svm_enterprise, org.graalvm.extraimage.builder, org.graalvm.nativeimage.base, org.graalvm.nativeimage.builder, org.graalvm.nativeimage.configure, org.graalvm.nativeimage.pointsto;
    exports org.graalvm.nativeimage.impl.clinit to org.graalvm.nativeimage.builder;
    exports org.graalvm.options;
    exports org.graalvm.polyglot;
    exports org.graalvm.polyglot.impl to com.oracle.graal.graal_enterprise, org.graalvm.truffle;
    exports org.graalvm.polyglot.io;
    exports org.graalvm.polyglot.management;
    exports org.graalvm.polyglot.proxy;
    exports org.graalvm.word;
    exports org.graalvm.word.impl to jdk.internal.vm.compiler;
    uses org.graalvm.home.HomeFinder;
    uses org.graalvm.nativeimage.Platform;
    uses org.graalvm.polyglot.impl.AbstractPolyglotImpl;
    opens org.graalvm.polyglot to org.graalvm.truffle;
    provides org.graalvm.home.HomeFinder with org.graalvm.home.impl.DefaultHomeFinder;
    provides org.graalvm.nativeimage.Platform with org.graalvm.nativeimage.Platform.MACOS_AMD64, org.graalvm.nativeimage.Platform.IOS_AMD64, org.graalvm.nativeimage.Platform.ANDROID_AARCH64, org.graalvm.nativeimage.Platform.LINUX_RISCV64, org.graalvm.nativeimage.Platform.IOS_AARCH64, org.graalvm.nativeimage.Platform.WINDOWS_AARCH64, org.graalvm.nativeimage.Platform.MACOS_AARCH64, org.graalvm.nativeimage.Platform.WINDOWS_AMD64, org.graalvm.nativeimage.Platform.LINUX_AARCH64, org.graalvm.nativeimage.Platform.LINUX_AMD64;
}

@SaptarshiSarkar12
Copy link

You may put these deps and try again with the hard-code of org.graalvm.nativeimage.Platform$DARWIN_MACOS

I not currently building on Mac, I got it built a few months ago.

<!-- https://mvnrepository.com/artifact/org.graalvm.nativeimage/library-support -->
<dependency>
    <groupId>org.graalvm.nativeimage</groupId>
    <artifactId>library-support</artifactId>
    <version>23.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.graalvm.sdk/graal-sdk -->
<dependency>
    <groupId>org.graalvm.sdk</groupId>
    <artifactId>graal-sdk</artifactId>
    <version>23.0.1</version>
</dependency>

@RealThanhpv I tried with these dependencies just now, but, the build failed with the same error message. I think that there is some problem in the org.graalvm.nativeimage.Platform$DARWIN_AMD64 java interface. GluonFX is failing to make an instance of that class. So, problem might lie with GluonFX SDK.

@RealThanhpv
Copy link
Author

It could not initiate org.graalvm.nativeimage.Platform$DARWIN_AMD64. DARWIN_AMD64 is not provided. So target MACOS_AMD64 with this
<nativeImageArg>-Dsvm.platform=org.graalvm.nativeimage.Platform$MACOS_AMD64</nativeImageArg> in your pom.xml

look at this module org.graalvm.sdk you can see org.graalvm.nativeimage.Platform is provided as below:

provides org.graalvm.nativeimage.Platform with org.graalvm.nativeimage.Platform.MACOS_AMD64, org.graalvm.nativeimage.Platform.IOS_AMD64, org.graalvm.nativeimage.Platform.ANDROID_AARCH64, org.graalvm.nativeimage.Platform.LINUX_RISCV64, org.graalvm.nativeimage.Platform.IOS_AARCH64, org.graalvm.nativeimage.Platform.WINDOWS_AARCH64, org.graalvm.nativeimage.Platform.MACOS_AARCH64, org.graalvm.nativeimage.Platform.WINDOWS_AMD64, org.graalvm.nativeimage.Platform.LINUX_AARCH64, org.graalvm.nativeimage.Platform.LINUX_AMD64;

@SaptarshiSarkar12
Copy link

@RealThanhpv It worked for macOS but, in the link task, it failed for windows.
The below is the error for link task on windows.

[Mon Aug 14 15:04:50 UTC 2023][INFO] [SUB]    Creating library D:\a\Drifty\Drifty\target\gluonfx\x86_64-windows\Drifty.lib and object D:\a\Drifty\Drifty\target\gluonfx\x86_64-windows\Drifty.exp
[Mon Aug 14 15:04:50 UTC 2023][INFO] [SUB] gui.launcher.obj : error LNK2001: unresolved external symbol Java_jdk_net_WindowsSocketOptions_getIpDontFragment0
[Mon Aug 14 15:04:50 UTC 2023][INFO] [SUB] gui.launcher.obj : error LNK2001: unresolved external symbol Java_jdk_net_WindowsSocketOptions_setIpDontFragment0
[Mon Aug 14 15:04:50 UTC 2023][INFO] [SUB] nio.lib(FileDispatcherImpl.obj) : error LNK2019: unresolved external symbol TransmitFile referenced in function Java_sun_nio_ch_FileDispatcherImpl_transferTo0
[Mon Aug 14 15:04:50 UTC 2023][INFO] [SUB] D:\a\Drifty\Drifty\target\gluonfx\x86_64-windows\Drifty.exe : fatal error LNK1120: 3 unresolved externals
[Mon Aug 14 15:04:50 UTC 2023][SEVERE] Process link failed with result: 1120

@SaptarshiSarkar12
Copy link

Can you please help me in this?
I would appreciate your help.

@RealThanhpv
Copy link
Author

Follow this: #456 (comment)
You may need create profiles for Windows, MacOs, Linux accordingly for the link tasks.

@SaptarshiSarkar12
Copy link

Follow this: #456 (comment) You may need create profiles for Windows, MacOs, Linux accordingly for the link tasks.

Yes @RealThanhpv, I have read that. But, I could not understand how to implement the fix. How would I add the linker arg? Can you show me a configuration example?
I have found that the WindowsSocketOptions class is under jdk.net.ExtendedSocketOptions which creates an instance of that private/protected WindowsSocketOptions class.

@SaptarshiSarkar12
Copy link

My pom.xml file is here. You can see I have created separate profiles for each OS-specific GUI build task.

@RealThanhpv
Copy link
Author

  1. add this to properties section in pom
    <dump.link>missing_symbols_win64.o</dump.link>

  2. add this to gluonfx-maven-plugin configuration section

                    <linkerArgs>
                        <arg>${dumb.link}</arg>
                    </linkerArgs>
  1. Use your gcc to compile this c code to get missing_symbols_win64.o and place it in project dir.
#include <stdlib.h>


void Java_jdk_net_WindowsSocketOptions_getIpDontFragment0(){}
void Java_jdk_net_WindowsSocketOptions_setIpDontFragment0(){}
void TransmitFile(){}
void Java_com_sun_management_internal_OperatingSystemImpl_initialize0(){}
void _Java_com_sun_management_internal_OperatingSystemImpl_initialize0(){}
  1. Compile it on mac, linux as well and define dumb.link for each platform, in the profiles . It is not allowed to attach .o files here so I can't share my builds.

@SaptarshiSarkar12
Copy link

@RealThanhpv Should I place the missing_symbols_win64.o file in src directory or project root?
Also, is it necessary to make this files for the other two OS?

@SaptarshiSarkar12
Copy link

@RealThanhpv When I run the gcc missing_symbols_win64.c command, it gave me the following error -

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x1b): undefined reference to `main'
collect2: error: ld returned 1 exit status

How can I solve this?
I think a main method is required, right?

@RealThanhpv
Copy link
Author

RealThanhpv commented Aug 15, 2023

@RealThanhpv Should I place the missing_symbols_win64.o file in src directory or project root? Also, is it necessary to make this files for the other two OS?

Yes. You compile a c code file into object files for platforms, accordingly. Those are platform dependent. So you should rename it. Google for compiling a C file to object files for platforms.

You put it where ever you want as long as the linker can find for the link task. I made my simple choice.

@RealThanhpv
Copy link
Author

RealThanhpv commented Aug 15, 2023

@RealThanhpv When I run the gcc missing_symbols_win64.c command, it gave me the following error -

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x1b): undefined reference to `main'
collect2: error: ld returned 1 exit status

How can I solve this? I think a main method is required, right?

No. It is not an executable file, It is an object file. Compile it to .o file not .exe file.

@SaptarshiSarkar12
Copy link

@RealThanhpv Okay, so, let me try it. Thank you for the help 😄 !

@SaptarshiSarkar12
Copy link

@RealThanhpv It worked! Thank you for your immense help 🙂 !

@RealThanhpv
Copy link
Author

Welcome to JavaFX native image :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants