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
精彩评论