我尝试在我的Mac OS X 10.6.6(MacBook Air3,2)上构建包含1.3.0的OCaml电池,但不能。 OCaml本身和拒绝库版本如下:
我没有使用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
答案 0 :(得分:1)
在Mac OS上,您必须禁用本机共享库构建。使用Make BATTERIES_NATIVE_SHLIB=no
参数来完成此任务:
$ make all install BATTERIES_NATIVE_SHLIB=no
GODI软件包默认在Mac上设置此参数,但您必须自行从源代码构建时手动设置它。 您需要在每次调用make
时设置此参数(或将其设置为环境变量)。
最后,我强烈推荐使用GODI。它使管理OCaml安装变得比手工操作容易得多。
答案 1 :(得分:1)
我向错误跟踪器报告,make test qtest
失败的原因是echo命令的-n
选项。
https://github.com/ocaml-batteries-team/batteries-included/issues#issue/122
首先在OS X中,必须设置选项BATTERIES_NATIVE_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)) >> $@
两种方式都有效。