0

I tried to play with QuickJS on WSL, and it works perfectly. But when I tried to cross compile it on WSL through MinGW according to documentation, it doesn't even compile with MinGW.

The is the steps I tried (in WSL):

wget https://bellard.org/quickjs/quickjs-2019-12-21.tar.xz
tar xf quickjs-2019-12-21.tar.xz
cd quickjs-2019-12-21.tar.xz
sudo apt install mingw-w64 -y
vim Makefile # Disable "CONFIG_LTO" and enable "CONFIG_WIN32"
make

And the output is:

mkdir -p .obj .obj/examples .obj/tests
i686-w64-mingw32-gcc -g -Wall -MMD -MF .obj/quickjs.check.o.d -Wno-array-bounds -Wno-format-truncation -D_GNU_SOURCE -DCONFIG_VERSION=\"2019-12-21\" -DCONFIG_CHECK_JSVALUE -c -o .obj/quickjs.check.o quickjs.c
i686-w64-mingw32-gcc -g -Wall -MMD -MF .obj/qjs.check.o.d -Wno-array-bounds -Wno-format-truncation -D_GNU_SOURCE -DCONFIG_VERSION=\"2019-12-21\" -DCONFIG_CHECK_JSVALUE -c -o .obj/qjs.check.o qjs.c
qjs.c: In function ‘js_trace_malloc_printf’:
qjs.c:152:35: warning: unknown conversion type character ‘l’ in format [-Wformat=]
                     printf("H%+06lld.%zd",
                                   ^
qjs.c:152:39: warning: unknown conversion type character ‘z’ in format [-Wformat=]
                     printf("H%+06lld.%zd",
                                       ^
qjs.c:152:28: warning: too many arguments for format [-Wformat-extra-args]
                     printf("H%+06lld.%zd",
                            ^~~~~~~~~~~~~~
qjs.c:152:35: warning: unknown conversion type character ‘l’ in format [-Wformat=]
                     printf("H%+06lld.%zd",
                                   ^
qjs.c:152:39: warning: unknown conversion type character ‘z’ in format [-Wformat=]
                     printf("H%+06lld.%zd",
                                       ^
qjs.c:152:28: warning: too many arguments for format [-Wformat-extra-args]
                     printf("H%+06lld.%zd",
                            ^~~~~~~~~~~~~~
qjs.c:161:26: warning: unknown conversion type character ‘z’ in format [-Wformat=]
                 printf("%zd", sz);
                          ^
qjs.c:161:24: warning: too many arguments for format [-Wformat-extra-args]
                 printf("%zd", sz);
                        ^~~~~
qjs.c:161:26: warning: unknown conversion type character ‘z’ in format [-Wformat=]
                 printf("%zd", sz);
                          ^
qjs.c:161:24: warning: too many arguments for format [-Wformat-extra-args]
                 printf("%zd", sz);
                        ^~~~~
qjs.c: In function ‘js_trace_malloc’:
qjs.c:186:35: warning: unknown conversion type character ‘z’ in format [-Wformat=]
     js_trace_malloc_printf(s, "A %zd -> %p\n", size, ptr);
                                   ^
qjs.c:186:42: warning: format ‘%p’ expects argument of type ‘void *’, but argument 3 has type ‘size_t {aka unsigned int}’ [-Wformat=]
     js_trace_malloc_printf(s, "A %zd -> %p\n", size, ptr);
                                         ~^
                                         %d
qjs.c:186:31: warning: too many arguments for format [-Wformat-extra-args]
     js_trace_malloc_printf(s, "A %zd -> %p\n", size, ptr);
                               ^~~~~~~~~~~~~~~
qjs.c: In function ‘js_trace_realloc’:
qjs.c:216:39: warning: unknown conversion type character ‘z’ in format [-Wformat=]
         js_trace_malloc_printf(s, "R %zd %p\n", size, ptr);
                                       ^
qjs.c:216:43: warning: format ‘%p’ expects argument of type ‘void *’, but argument 3 has type ‘size_t {aka unsigned int}’ [-Wformat=]
         js_trace_malloc_printf(s, "R %zd %p\n", size, ptr);
                                          ~^
                                          %d
qjs.c:216:35: warning: too many arguments for format [-Wformat-extra-args]
         js_trace_malloc_printf(s, "R %zd %p\n", size, ptr);
                                   ^~~~~~~~~~~~
qjs.c:225:35: warning: unknown conversion type character ‘z’ in format [-Wformat=]
     js_trace_malloc_printf(s, "R %zd %p", size, ptr);
                                   ^
qjs.c:225:39: warning: format ‘%p’ expects argument of type ‘void *’, but argument 3 has type ‘size_t {aka unsigned int}’ [-Wformat=]
     js_trace_malloc_printf(s, "R %zd %p", size, ptr);
                                      ~^
                                      %d
qjs.c:225:31: warning: too many arguments for format [-Wformat-extra-args]
     js_trace_malloc_printf(s, "R %zd %p", size, ptr);
                               ^~~~~~~~~~
i686-w64-mingw32-gcc -g -Wall -MMD -MF .obj/qjs.o.d -Wno-array-bounds -Wno-format-truncation -D_GNU_SOURCE -DCONFIG_VERSION=\"2019-12-21\" -O2 -c -o .obj/qjs.o qjs.c
qjs.c: In function ‘js_trace_malloc_printf’:
qjs.c:152:35: warning: unknown conversion type character ‘l’ in format [-Wformat=]
                     printf("H%+06lld.%zd",
                                   ^
qjs.c:152:39: warning: unknown conversion type character ‘z’ in format [-Wformat=]
                     printf("H%+06lld.%zd",
                                       ^
qjs.c:152:28: warning: too many arguments for format [-Wformat-extra-args]
                     printf("H%+06lld.%zd",
                            ^~~~~~~~~~~~~~
qjs.c:152:35: warning: unknown conversion type character ‘l’ in format [-Wformat=]
                     printf("H%+06lld.%zd",
                                   ^
qjs.c:152:39: warning: unknown conversion type character ‘z’ in format [-Wformat=]
                     printf("H%+06lld.%zd",
                                       ^
qjs.c:152:28: warning: too many arguments for format [-Wformat-extra-args]
                     printf("H%+06lld.%zd",
                            ^~~~~~~~~~~~~~
qjs.c:161:26: warning: unknown conversion type character ‘z’ in format [-Wformat=]
                 printf("%zd", sz);
                          ^
qjs.c:161:24: warning: too many arguments for format [-Wformat-extra-args]
                 printf("%zd", sz);
                        ^~~~~
qjs.c:161:26: warning: unknown conversion type character ‘z’ in format [-Wformat=]
                 printf("%zd", sz);
                          ^
qjs.c:161:24: warning: too many arguments for format [-Wformat-extra-args]
                 printf("%zd", sz);
                        ^~~~~
qjs.c: In function ‘js_trace_malloc’:
qjs.c:186:35: warning: unknown conversion type character ‘z’ in format [-Wformat=]
     js_trace_malloc_printf(s, "A %zd -> %p\n", size, ptr);
                                   ^
qjs.c:186:42: warning: format ‘%p’ expects argument of type ‘void *’, but argument 3 has type ‘size_t {aka unsigned int}’ [-Wformat=]
     js_trace_malloc_printf(s, "A %zd -> %p\n", size, ptr);
                                         ~^
                                         %d
qjs.c:186:31: warning: too many arguments for format [-Wformat-extra-args]
     js_trace_malloc_printf(s, "A %zd -> %p\n", size, ptr);
                               ^~~~~~~~~~~~~~~
qjs.c: In function ‘js_trace_realloc’:
qjs.c:216:39: warning: unknown conversion type character ‘z’ in format [-Wformat=]
         js_trace_malloc_printf(s, "R %zd %p\n", size, ptr);
                                       ^
qjs.c:216:43: warning: format ‘%p’ expects argument of type ‘void *’, but argument 3 has type ‘size_t {aka unsigned int}’ [-Wformat=]
         js_trace_malloc_printf(s, "R %zd %p\n", size, ptr);
                                          ~^
                                          %d
qjs.c:216:35: warning: too many arguments for format [-Wformat-extra-args]
         js_trace_malloc_printf(s, "R %zd %p\n", size, ptr);
                                   ^~~~~~~~~~~~
qjs.c:225:35: warning: unknown conversion type character ‘z’ in format [-Wformat=]
     js_trace_malloc_printf(s, "R %zd %p", size, ptr);
                                   ^
qjs.c:225:39: warning: format ‘%p’ expects argument of type ‘void *’, but argument 3 has type ‘size_t {aka unsigned int}’ [-Wformat=]
     js_trace_malloc_printf(s, "R %zd %p", size, ptr);
                                      ~^
                                      %d
qjs.c:225:31: warning: too many arguments for format [-Wformat-extra-args]
     js_trace_malloc_printf(s, "R %zd %p", size, ptr);
                               ^~~~~~~~~~
gcc -g -Wall -MMD -MF .obj/qjsc.host.o.d -Wno-array-bounds -Wno-format-truncation -D_GNU_SOURCE -DCONFIG_VERSION=\"2019-12-21\" -DCONFIG_CC=\"gcc\" -DCONFIG_PREFIX=\"/usr/local\" -O2 -c -o .obj/qjsc.host.o qjsc.c
gcc -g -Wall -MMD -MF .obj/quickjs.host.o.d -Wno-array-bounds -Wno-format-truncation -D_GNU_SOURCE -DCONFIG_VERSION=\"2019-12-21\" -O2 -c -o .obj/quickjs.host.o quickjs.c
gcc -g -Wall -MMD -MF .obj/libregexp.host.o.d -Wno-array-bounds -Wno-format-truncation -D_GNU_SOURCE -DCONFIG_VERSION=\"2019-12-21\" -O2 -c -o .obj/libregexp.host.o libregexp.c
gcc -g -Wall -MMD -MF .obj/libunicode.host.o.d -Wno-array-bounds -Wno-format-truncation -D_GNU_SOURCE -DCONFIG_VERSION=\"2019-12-21\" -O2 -c -o .obj/libunicode.host.o libunicode.c
gcc -g -Wall -MMD -MF .obj/cutils.host.o.d -Wno-array-bounds -Wno-format-truncation -D_GNU_SOURCE -DCONFIG_VERSION=\"2019-12-21\" -O2 -c -o .obj/cutils.host.o cutils.c
gcc -g -Wall -MMD -MF .obj/quickjs-libc.host.o.d -Wno-array-bounds -Wno-format-truncation -D_GNU_SOURCE -DCONFIG_VERSION=\"2019-12-21\" -O2 -c -o .obj/quickjs-libc.host.o quickjs-libc.c
gcc -g -o host-qjsc .obj/qjsc.host.o .obj/quickjs.host.o .obj/libregexp.host.o .obj/libunicode.host.o .obj/cutils.host.o .obj/quickjs-libc.host.o -lm
.obj/quickjs-libc.host.o: In function `js_module_loader_so':
/mnt/c/Users/maple3142/Downloads/quickjs-2019-12-21/quickjs-libc.c:405: undefined reference to `dlopen'
/mnt/c/Users/maple3142/Downloads/quickjs-2019-12-21/quickjs-libc.c:414: undefined reference to `dlsym'
/mnt/c/Users/maple3142/Downloads/quickjs-2019-12-21/quickjs-libc.c:427: undefined reference to `dlclose'
/mnt/c/Users/maple3142/Downloads/quickjs-2019-12-21/quickjs-libc.c:405: undefined reference to `dlopen'
collect2: error: ld returned 1 exit status
Makefile:190: recipe for target 'host-qjsc' failed
make: *** [host-qjsc] Error 1

Additional information:

3142 maple
  • 865
  • 2
  • 11
  • 27

0 Answers0