2015-04-23 36 views
0

這是一個簡單的ocaml文件,目的是讓我瞭解如何將使用電池庫的程序加載到ocamltop中。將電池相關文件加載到ocamltop中 - 界面不同意

batteryassault.ml

open Batteries 

let main = print_string "hello, world ... powered on" 

我編譯這與

ocamlfind ocamlc -package batteries -linkpkg batteryassault.ml 

在batteryassault.cmo和batteryassault.cmi得到的字節碼,並沒有錯誤,也沒有警告。於是,我開始

rlwrap ocamlfind batteries/ocaml 

最後,電池供電ocamltop加載文件中ocamltop:

#load "batteryassault.cmo" ;; 

然後我們得到一個錯誤。

的文件batteryassault.cmo和/usr/lib/ocaml/batteries/batteries.cma 不同意以上接口電池

我覺得有什麼可以怎麼回事的是,Ubuntu的安裝電池2.2.1 ,但出於某種原因(安裝梅林?)我的電池安裝在我的opam文件夾中,而且,如果使用上述電池啓動ocamltop,則表明ocamltop正在使用2.2.1版本。此外,

ocamlfind ocamlc -package batteries -linkpkg batteryassault.ml -verbose 

編譯我發現ocamlc肯定是使用OPAM庫,即2.3.1版本。

所以我的問題是:什麼是/是否有解決方法?

+0

此外,與 rlwrap開始ocamltop〜/ .opam /系統/ lib中/電池/ ocaml的 也沒有幫助。 –

回答

0

通常我建議根本除去系統OCaml安裝。否則,你可能會有這樣的錯誤。

您應該確保所有的工具和庫都來自同一個源,在這種情況下來自opam。

一個通常的錯誤是忘記在某些時候呼籲

eval `opam config env` 

。你可能會回想起這一點,並激活你的opam,從而結束,部分應用程序,甚至使用opam構建的opam棧與其他使用系統庫構建的部件。如果你犯了這樣的錯誤,很難猜出什麼時候出錯。

但是,如果你仍然不想刪除系統電池,那麼你需要非常小心。例如,由於ocamlfind batteries/ocaml導致加載舊版本的電池,那麼你可以嘗試使用這一招,以確保電池topleve從OPAM加載:

$ `opam config var batteries:lib`/ocaml 

如果問題仍然存在,這意味着你的系統真的壞了。考慮刪除你的opam stack,並從頭開始仔細做一切。例如。,

rm -rf ~/.opam 
opam init --comp=4.02.1 
eval `opam config env` 
opam install batteries 
相關問題