digitalgust / tinyj2c

Convert JAVA source to C source, Build standlone binary without any class file.
MIT License
57 stars 11 forks source link

Compile issues #1

Open drthinh opened 3 years ago

drthinh commented 3 years ago

Thank you for your previous reply in /mini_jvm I have some problems when compile minijvm_rt.jar to C code

drthinh commented 3 years ago

`Searching 27 files for "arr_body"

E:\Projects\Setup\miniJVM\java2c-master\java2c-master\app\vm\native_std.c: 1052 #if defined(JVM_OS_MINGW) || defined(JVM_OS_CYGWIN) || defined(JVM_OS_VS) 1053 utf8_append_c(libname, "/lib"); 1054: utf8_append_c(libname, name_arr->arr_body); 1055 utf8_append_c(libname, ".dll"); 1056 utf8_replace_c(libname, "//", "/"); .... 1362 if (p0) { 1363 #if JVM_OS_MINGW || JVM_OS_CYGWIN || JVM_OS_VS 1364: ret = mkdir(path_arr->arr_body); 1365 #else 1366 ret = mkdir(p0->prop.as_s8_arr, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);

2 matches in 1 file`

E:\Projects\Setup\miniJVM\java2c-master\java2c-master\app\vm\native_std.c:1054:40: error: 'JArray {aka struct _JObject}' has no member named 'arr_body' utf8_append_c(libname, name_arr->arr_body); ^~ E:\Projects\Setup\miniJVM\java2c-master\java2c-master\app\vm\native_std.c:1066:20: error: 'jnienv' undeclared (first use in this function) f(&jnienv); ^~~~~~ E:\Projects\Setup\miniJVM\java2c-master\java2c-master\app\vm\native_std.c:1066:20: note: each undeclared identifier is reported only once for each function it appears in E:\Projects\Setup\miniJVM\java2c-master\java2c-master\app\vm\native_std.c: In function 'Java_org_mini_fs_InnerFile_mkdir0___3B_I': E:\Projects\Setup\miniJVM\java2c-master\java2c-master\app\vm\native_std.c:1364:21: error: 'path_arr' undeclared (first use in this function) ret = mkdir(path_arr->arr_body);

There isn't any define for arr_body, path_arr, name_arr, jnienv

digitalgust commented 3 years ago

update code ,recompile it

drthinh commented 3 years ago

Still dont have denfination for arr_body, path_arr, name_arr, jnienv in native_std.c. So I changed:

102.   err("set socket non_block error: %s\n", strerror(errno));  => //err("set socket non_block error: %s\n", strerror(errno))
Dont have err() function in Mingw/Windows
1053. utf8_append_c(libname,name_arr->arr_body); => utf8_append_c(libname, p0->prop.as_s8_ar);
1065. f(&jnienv) => f(&g_jvm->env);
1374. ret = mkdir(path_arr->arr_body); => ret = mkdir(p0->prop.as_s8_arr);

In jvm.c file: 826. if (argc > 1) { => if (argc >= 1) { the ccjvm only take argv[1] ?

The Gcc dont recognize #pragma direct for winsock and pthread library so I insert Cmake code TARGET_LINK_LIBRARIES(ccjvm pthread ws2_32) The compilication was fine, it make ccjvm.exe But when I run some .class, it show only text

E:\Projects\Setup\miniJVM\java2c-master2\java2c-master\cmake-build-release>ccjvm HelloWorld
jvm created
[INFO]gc obj: 0->0   heap : 0 -> 0  stop_world: 0  gc:0

what is the problem? Thanks.

digitalgust commented 3 years ago

fixed win platform

drthinh commented 3 years ago

It lost sched_yield function on linking, so I added pthread on Cmake But it still display nothing (I copied test folder with classes .class file into it - which extracted from minijvm_test.jar)

E:\Projects\Setup\miniJVM\java2c-master3\java2c-master\cmake-build-release\ccjvm.exe test.Foo3
jvm created

Process finished with exit code -1073741819 (0xC0000005)
digitalgust commented 3 years ago

fix and tested on mingw32