Macos OCaml电池包括can和x27;不能构建在Mac OS X 10.6.6上

Macos OCaml电池包括can和x27;不能构建在Mac OS X 10.6.6上,macos,ocaml,Macos,Ocaml,我尝试在MacOSX10.6.6(MacBookAir3,2)上构建OCaml电池,包括1.3.0,但没有成功。 OCaml本身和denpending库的版本如下: #put all the testing modules in a library qtest/test_mods.mllib: $(TESTABLE) - echo -n "Quickcheck Tests \c" > $@ + echo "Quickcheck Tests \c" > $@ echo $(p

我尝试在MacOSX10.6.6(MacBookAir3,2)上构建OCaml电池,包括1.3.0,但没有成功。 OCaml本身和denpending库的版本如下:

#put all the testing modules in a library
qtest/test_mods.mllib: $(TESTABLE)
-  echo -n "Quickcheck Tests \c" > $@
+  echo "Quickcheck Tests \c" > $@
   echo $(patsubst src/%.ml,%_t, $(TESTABLE)) >> $@
  • OCaml:3.11.2
  • findlib:1.2.6
  • 欧尼特:1.1.0
  • 甘菊:0.8.1
  • 制造:3.81
我没有使用GODI进行安装。是否有人运行Mac上附带的OCaml电池,如果有,您能告诉我您的库版本吗?此外,您能否找到解决此错误的方法

% make all
cp -f src/batCamomile-0.8.1.ml src/batCamomile.ml
test ! -e src/batteries_config.ml || rm src/batteries_config.ml
ocamlbuild syntax.otarget byte.otarget src/batteries_help.cmo META shared.otarget
Finished, 0 targets (0 cached) in 00:00:00.
+ ocamlfind ocamlopt -shared -linkall -package camomile,num,str -o src/batteries_uni.cmxs src/batteries_uni.cmxa
ld: warning: -read_only_relocs cannot be used with x86_64
ld: codegen problem, can't use rel32 to external symbol _caml_negf_mask in .L101 from src/batteries_uni.a(batFloat.o)
collect2: ld returned 1 exit status
File "caml_startup", line 1, characters 0-1:
Error: Error during linking
Command exited with code 2.
Compilation unsuccessful after building 479 targets (478 cached) in 00:00:01.
make: *** [all] Error 10
谢谢,
Yoshi a.k.a.ymotongpoo

在Mac OS上,必须禁用本机共享库构建。使用
batters\u NATIVE\u SHLIB=no
参数进行以下操作:

$ make all install BATTERIES_NATIVE_SHLIB=no
默认情况下,GODI包在Mac上设置此参数,但您必须在自己从源代码构建时手动设置您需要在每次调用
make
(或将其设置为环境变量)时设置此参数


最后,我强烈推荐使用GODI。它使管理OCaml安装比手工操作容易得多。

我向bug tracker报告,导致
make test qtest
失败的原因是echo命令的
-n
选项。

首先在OSX中,必须设置选项
batters\u NATIVE\u SHLIB=false
。而且,您仍然需要修改Makefile以成功运行测试。 存储库中的最新版本已修复,但如果要构建1.3.0 tarball,请按如下方式修改Makefile:

#put all the testing modules in a library
qtest/test_mods.mllib: $(TESTABLE)
-  echo -n "Quickcheck Tests \c" > $@
+  echo "Quickcheck Tests \c" > $@
   echo $(patsubst src/%.ml,%_t, $(TESTABLE)) >> $@
或者,您可以使用
/bin/echo

#put all the testing modules in a library
qtest/test_mods.mllib: $(TESTABLE)
-  echo -n "Quickcheck Tests \c" > $@
+  /bin/echo -n "Quickcheck Tests \c" > $@
   echo $(patsubst src/%.ml,%_t, $(TESTABLE)) >> $@

双向工作。

我确实使用OCaml 3.12.1+dev5构建了电池1.3.0。我从未见过像你这样的错误。这个线程可能与此相关:有些人认为这是GCC中的一个bug。获取最新的XCode。我使用GCC4.2.1构建了它。再见,嗨,米塔斯!我当然查过链接了。我打开了
batters\u NATIVE\u SHLIB=false
,这实际上使
make-all
成功成为可能,但
make-test-qtest
在创建
test\u-mods.ml
和更多时失败。我的GCC版本也是最新的XCode版本,GCC4.2.1。是的,它实际上适用于
makeall
makeinstall
。但正如我在上面所评论的那样,
maketestqtest
不能使用该选项。如果测试不重要,那么我就忽略它们。您是否尝试过使用该选项进行测试?@ymotongpoo否-我没有Mac(据我所知,其他核心开发人员也没有),因此Mac修复完全基于用户的报告。不过,听起来好像
test
qtest
选项绕过了本机shlib禁用逻辑。你能把一个bug归档吗?啊,好的,我知道了。在我的Debian环境中,我可以构建包含1.3.0的OCaml电池。然后,我将bug注册到bug跟踪器中。谢谢