2011-10-12 40 views
0

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

问题是flexlink命令发生的Access Denied错误。我自己重复了前两个命令,其结果与ocamlbuild相同,但它所报告的错误消息可以轻松地由我执行。

有问题的所有应用程序拥有相似的权限,由Developer拥有。任何人有任何见解?谢谢。

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

[email protected] ~/sample_ocaml 
$ ocamlbuild -clean 
rm -Rf _build 

[email protected] ~/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 

[email protected] ~/sample_ocaml 
$ as -o "C:\cygwin\tmp\camlstartupe069c2.o" "C:\cygwin\tmp\camlstartup48b824.s" 

[email protected] ~/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 

[email protected] ~/sample_ocaml 
$ gcc -mno-cygwin -print-libgcc-file-name 
/usr/lib/gcc/i686-pc-mingw32/3.4.4/libgcc.a 

[email protected] ~/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 
+0

的FlexLink的命令启动代码是越野车和不一致的我最后一次看,有人应该修复它:) – ygrek

回答

3

看起来像Cygwin的窗户+问题给我。

我记得有实际的可执行文件回到WINXP更换Cygwin的符号链接,所以也许这是关系:

+1

确认,只需将'gcc.exe'符号链接替换为重命名'gcc-xx.exe'二进制文件即可。 –

+0

是的,这工作。谢谢。现在与crt2.o有问题。 – nlucaroni

+0

@nlucaroni:'set FLEXLINKFLAGS = -nocygpath -subsystem windows -LC:\ cygwin \ usr \ i686-pc-mingw32 \ sys-root \ mingw \ lib -LC:\ cygwin \ lib \ gcc \ i686-pc-mingw32 \ 3.4.4'或者只是用'-I'开关添加这个路径也应该工作 –