2017-03-29 117 views
0

我按照说明使用MSYS2工具链编译64位Unison,如HERE所述。编译Windows 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 

的编译错误提前结束:

ocamlopt: lwt/lwt_unix_stubs.c ---> lwt/lwt_unix_stubs.o 
ocamlopt -g -I lwt -I ubase -I system -I fsmonitor -I fsmonitor/linux -I fsmonitor/windows -I system/win -I lwt/win -ccopt "-o "./lwt/lwt_unix_stubs.o -c ./lwt/lwt_unix_stubs.c 
In file included from ./lwt/lwt_unix_stubs.c:8:0: 
./lwt/lwt_unix_stubs.c: In function 'invoke_completion_callback': 
C:\MSYS64\mingw64\lib\ocaml/caml/memory.h:236:12: error: 'caml__frame' undeclared (first use in this function) 
    (void) caml__frame, \ 
      ^
C:\MSYS64\mingw64\lib\ocaml/caml/memory.h:236:12: note: in definition of macro 'CAMLxparam2' 
    (void) caml__frame, \ 
      ^~~~~~~~~~~ 
./lwt/lwt_unix_stubs.c:82:3: note: in expansion of macro 'CAMLlocal2' 
    CAMLlocal2 (err, name); 
^
C:\MSYS64\mingw64\lib\ocaml/caml/memory.h:236:12: note: each undeclared identifier is reported only once for each function it appears in 
    (void) caml__frame, \ 
      ^
C:\MSYS64\mingw64\lib\ocaml/caml/memory.h:236:12: note: in definition of macro 'CAMLxparam2' 
    (void) caml__frame, \ 
      ^~~~~~~~~~~ 
./lwt/lwt_unix_stubs.c:82:3: note: in expansion of macro 'CAMLlocal2' 
    CAMLlocal2 (err, name); 
^
make[1]: *** [Makefile.OCaml:434: lwt/lwt_unix_stubs.o] Error 2 
make[1]: Leaving directory '/tmp/unison/src' 
make: *** [Makefile:14: src] Error 2 

不太清楚什么是错的,任何帮助吗?

+0

'sed'命令对我来说看起来很可疑。它评论了包括一个32位库的行。这是一个(非常)很长的镜头,但是可能不包括64位对应部分,导致丢失符号? – RichouHunter

+0

原因在帖子中详细介绍。它与labgtk的错误引用有关。即使我没有通过指定UISTYLE = text – JackeJR

回答

1

这里从文章原始海报...

我终于重现与OCaml的问题 - 当前版本齐奏的不严格遵循OCaml的界面指引,可在http://caml.inria.fr/pub/docs/manual-ocaml-4.04/intfc.html

找到

相关文本:“特别是,CAMLlocal和CAMLxparam只能在CAMLparam之后调用”。因此,CAMLparam(0)一个简单的通话修复该问题:

--- 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); 

我更新在https://www.onwebsecurity.com/configuration/its-about-the-journey-compiling-64-bit-unison-gtk2-on-windows.html文章包含这个补丁,并将上游发送到协调维护者。

+0

编译gtk GUI,编译也会停止谢谢!我可以在我的设置上确认它的工作方式类似。 – JackeJR