简体   繁体   中英

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 fine. 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 :

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM