开发者

Compiling an OCaml program on Windows w/ ocamlbuild

I'm trying to set up a box to compile my project on windows. This is windows 7 32bit, with mingw, gcc, and other libraries installed through the cygwin setup application. flexdll and OCaml were installed through the compiled packages on their respective websites.

The issue is the Access Denied error that occurs from the flexlink command. I repeated the previous two commands myself, with the same results as ocamlbuild, and yet the error message it is reporting, can easily be executed by me.

All applications in question have similar permissions, owned by Developer. Anyone have any insight? Thanks.

EDIT Some further details. The bytecode compilation works fine here. Looking through the flexdll source code, and how it runs that command. It does it two way, both via Sys.command. When the bash flag is set the command is written to a file and run like, bash somefile. This works f开发者_如何学Pythonine. Calling the command directly fails with Access Denied. I've modified the story below to reflect this.

Developer@warhol ~/sample_ocaml
$ ocamlbuild -clean
rm -Rf _build

Developer@warhol ~/sample_ocaml
$ ocamlbuild -classic-display -cflags -verbose -lflags -verbose test.native
mkdir _build
ocamldep -modules test.ml > test.ml.depends
ocamlc -c -verbose -o test.cmo test.ml
ocamlopt -c -verbose -o test.cmx test.ml
+ as -o "test.o" "C:\cygwin\tmp\camlasm07d3fe.s"
ocamlopt -verbose test.cmx -o test.native
+ as -o "C:\cygwin\tmp\camlstartupe069c2.o" "C:\cygwin\tmp\camlstartup48b824.s"
+ flexlink -chain mingw -exe -o "test.native"   "-LC:\ocamlmgw\lib" "C:\cygwin\tmp\camlstartupe069c2.o" "C:\ocamlmgw\lib
\std_exit.o" "test.o" "C:\ocamlmgw\lib\stdlib.a" "C:\ocamlmgw\lib\libasmrun.a" -lws2_32
Access is denied.
** Fatal error: Cannot run gcc -mno-cygwin -print-libgcc-file-name
File "caml_startup", line 1, characters 0-1:
Error: Error during linking
Exit code 2 while executing this command:
  ocamlopt -verbose test.cmx -o test.native

Developer@warhol ~/sample_ocaml
$ as -o "C:\cygwin\tmp\camlstartupe069c2.o" "C:\cygwin\tmp\camlstartup48b824.s"

Developer@warhol ~/sample_ocaml
$ flexlink -chain mingw -exe -o "test.native" "-LC:\ocamlmgw\lib" "C:\cygwin\tmp\camlstartupe069c2.o" "C:\ocamlmgw\lib\
std_exit.o" "test.o" "C:\ocamlmgw\lib\stdlib.a" "C:\ocamlmgw\lib\libasmrun.a" -lws2_32
Access is denied.
** Fatal error: Cannot run gcc -mno-cygwin -print-libgcc-file-name

Developer@warhol ~/sample_ocaml
$ gcc -mno-cygwin -print-libgcc-file-name
/usr/lib/gcc/i686-pc-mingw32/3.4.4/libgcc.a

Developer@warhol ~/sample_ocaml
$ ocaml
        Objective Caml version 3.11.0

# Sys.command "bash /tmp/long_file.sh";;
/usr/lib/gcc/i686-pc-mingw32/3.4.4/libgcc.a
- : int = 0
# Sys.command "gcc -mno-cygwin -print-libgcc-file-name";;
Access is denied.
- : int = 1


Looks like cygwin+windows problem to me.

I remember replacing cygwin symlinks with actual executables back on winxp, so maybe this is related :

  • http://www.mail-archive.com/cygwin@cygwin.com/msg104071.html
  • http://www.mail-archive.com/caml-list@yquem.inria.fr/msg05422.html
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜