在Windows上使用ocamlbuild编译OCaml程序

时间:2011-10-12 21:53:21

标签: windows cygwin mingw ocaml

我正在尝试设置一个框来在Windows上编译我的项目。这是windows 7 32bit,通过cygwin安装应用程序安装了mingw,gcc和其他库。 flexdll和OCaml是通过各自网站上的编译软件包安装的。

问题是Access Denied命令发生的flexlink错误。我自己重复了前两个命令,结果与ocamlbuild相同,但是它报告的错误信息很容易被我执行。

所有相关的应用程序都拥有类似的权限,由Developer拥有。有人有任何见解吗?感谢。

编辑一些进一步的细节。字节码编译在这里工作正常。浏览flexdll源代码,以及它如何运行该命令。它通过Sys.command以两种方式完成。设置bash标志后,命令将写入文件并运行,如bash somefile。这很好用。使用Access Denied直接调用命令失败。我修改了下面的故事以反映这一点。

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

1 个答案:

答案 0 :(得分:3)

看起来像cygwin + windows问题。

我记得用winxp上的实际可执行文件替换cygwin符号链接,所以这可能是相关的: