2

我以前问过这个问题但事实证明我认为的解决方案不是。

问题

我刚刚开始全新的 GODI 安装,我正在尝试安装电池库。我已经对所有依赖项进行了排序,例如洋甘菊。我收到以下错误:

> ocamlfind ocamlopt -a -package camomile,num,str src/batCamomile.cmx src/batConcurrent.cmx src/batInnerWeaktbl.cmx src/batInnerIO.cmx src/batInterfaces.cmx src/batMonad.cmx src/batRef.cmx src/batValue_printer.cmx src/batEnum.cmx src/batPrintf.cmx src/batList.cmx src/batRefList.cmx src/batArg.cmx src/batBitSet.cmx src/batChar.cmx src/batReturn.cmx src/batString.cmx src/batUChar.cmx src/batUTF8.cmx src/batRope.cmx src/batUnix.cmx src/batIO.cmx src/batArray.cmx src/batBigarray.cmx src/batNumber.cmx src/batBig_int.cmx src/batStd.cmx src/batBool.cmx src/batBuffer.cmx src/batInt.cmx src/batMap.cmx src/batOption.cmx src/batPMap.cmx src/batLazyList.cmx src/batParserCo.cmx src/batVect.cmx src/batCharParser.cmx src/batFloat.cmx src/batStream.cmx src/batGenlex.cmx src/batComplex.cmx src/batDigest.cmx src/batFormat.cmx src/batGc.cmx src/batHashtbl.cmx src/batInt32.cmx src/batInt64.cmx src/batLexing.cmx src/batMarshal.cmx src/batNativeint.cmx src/batNum.cmx src/batOo.cmx src/batFile.cmx src/batPrint.cmx src/batPrintexc.cmx src/batPervasives.cmx src/batQueue.cmx src/batRandom.cmx src/batScanf.cmx src/batSet.cmx src/batStack.cmx src/batStr.cmx src/batSys.cmx src/batUnit.cmx src/batBase64.cmx src/batCharEncodings.cmx src/batDllist.cmx src/batDynArray.cmx src/batGlobal.cmx src/batSubstring.cmx src/batLogger.cmx src/batPSet.cmx src/batMultiPMap.cmx src/batOptParse.cmx src/batPair.cmx src/batUCharParser.cmx src/batPathGen.cmx src/batResult.cmx src/batSeq.cmx src/batAvlTree.cmx src/batISet.cmx src/batIMap.cmx src/batteries_config.cmx src/batteries_print.cmx src/batteries_uni.cmx src/batMutex.cmx src/batRMutex.cmx src/batteries.cmx -o src/batteries.cmxa
> ocamlfind ocamlopt -shared -linkall -package camomile,num,str -o src/batteries_uni.cmxs src/batteries_uni.cmxa
> + 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.
> make[7]: *** [all] Error 10
> Error: Exec error: File /Users/surikator/godi/build/godi/godi-batteries/./../../mk/bsd.pkg.mk, line 1039: Command returned with non-zero exit code
> Error: Exec error: File /Users/surikator/godi/build/godi/godi-batteries/./../../mk/bsd.pkg.mk, line 1378: Command returned with non-zero exit code

### Error: Command fails with code 1: godi_console

不起作用的解决方案

在我之前的问题中,基于这篇文章,我切换了 GODI 设置

GODI_BATTERIES_SHLIB = no

它确实完成了电池的安装。但是我刚刚开始全新安装 GODI,即使使用此设置,我仍然收到上述错误(与我最初的错误相同)。

我的设置

我在 MacBookPro(64 位)上使用 Mac OS X 版本 10.6.4 和最新版本的 GODI(rocketboost-20091222)。

想法?

> ld: warning: -read_only_relocs cannot be used with x86_64

确实,电池/godi 似乎正在尝试为 32 位做某事,而它应该为 64 位做某事。电池或 godi 中是否有一些可以更改的设置?

> ld: codegen problem, can't use rel32 to external symbol _caml_negf_mask in .L101 from src/batteries_uni.a(batFloat.o)

可以看出问题的根源在于库batteries_uni.a。不知道里面有没有强加32位的东西?我注意到它batteries_uni.ml包括用于整数的模块 Int32 和 Int64,但这应该不是问题,不是吗?

有任何想法吗?

对此的任何帮助都会很棒!

非常感谢,Surikator。

4

1 回答 1

2

我做了一些调查,结果发现 GODI 打包脚本中有一个错误,因此该GODI_BATTERIES_SHILB选项是无操作的。我已更正此错误并发布了更新的构建脚本,因此no在更新您的 GODI 安装(godi_update或“检查新源包” godi_console)后将其设置为并构建电池应该可以成功阻止.cmxs构建和安装文件。我认为这将允许您现在在 Mac 上构建。

我想找到实际的构建错误并让.cmxs文件在 Mac 上运行,但是电池开发人员都没有 Mac(据我所知),所以这有点难。

于 2011-01-27T03:14:24.003 回答