Compiler errors 为Windows 64位系统编译unison

Compiler errors 为Windows 64位系统编译unison,compiler-errors,ocaml,unison,Compiler Errors,Ocaml,Unison,我按照说明使用MSYS2工具链编译64位Unison,如所述 简而言之,以下是步骤: pacman -Sy --noconfirm base-devel git mingw-w64-x86_64-{glib2,gtk2,ocaml,toolchain} sed -i "s/#include <gdk\/win32\/gdkwin32keys.h>/\/\/#include <gdk\/win32\/gdkwin32keys.h>/" /mingw64/include/gt

我按照说明使用MSYS2工具链编译64位Unison,如所述

简而言之,以下是步骤:

pacman -Sy --noconfirm base-devel git mingw-w64-x86_64-{glib2,gtk2,ocaml,toolchain}
sed -i "s/#include <gdk\/win32\/gdkwin32keys.h>/\/\/#include <gdk\/win32\/gdkwin32keys.h>/" /mingw64/include/gtk-2.0/gdk/gdkwin32.h
VERSION=2.18.5 && pushd /tmp && wget -c https://forge.ocamlcore.org/frs/download.php/1627/$VERSION.tar.gz
tar -xzvf $VERSION.tar.gz && cd lablgtk-$VERSION && ./configure --prefix=/mingw64 --disable-gtktest && make ; strip src/dlllablgtk2.dll && make opt && make old-install INSTALLDIR=/mingw64/lib/ocaml/lablgtk2/ BINDIR=/mingw64/bin/ DLLDIR=/mingw64/lib/ocaml/stublibs/
pushd /tmp && git clone --depth=1 https://github.com/bcpierce00/unison && cd unison
make windres && make src OSARCH=win32gnuc

不太确定出了什么问题,有什么帮助吗?

这里是文章的原始海报

我终于设法用OCaml重现了这个问题——Unison的当前版本没有严格遵循OCaml接口指南,可以在

相关文本:特别是,camlocal和CAMLxparam只能在CAMLparam之后调用。因此,对CAMLparam0的简单调用可以解决以下问题:

--- a/src/lwt/lwt_unix_stubs.c
+++ b/src/lwt/lwt_unix_stubs.c
@@ -79,6 +79,7 @@

static void invoke_completion_callback
(long id, long len, long errCode, long action) {
+  CAMLparam0();
   CAMLlocal2 (err, name);
   value args[4];
   err = Val_long(0);

我在上更新了文章,加入了此修补程序,并将其发送到Unison维护人员的上游。

sed命令在我看来非常可疑。它注释了包含32位库的行。这是一个很长的机会,但可能64位的对应物没有包括在内,导致丢失符号?原因在文章中有详细说明。这与labgtk的错误引用有关。即使我没有通过指定UISTYLE=textThank编译gtk GUI,编译也会停止!我可以确认它在我的设置中也同样有效。
--- a/src/lwt/lwt_unix_stubs.c
+++ b/src/lwt/lwt_unix_stubs.c
@@ -79,6 +79,7 @@

static void invoke_completion_callback
(long id, long len, long errCode, long action) {
+  CAMLparam0();
   CAMLlocal2 (err, name);
   value args[4];
   err = Val_long(0);