2011-11-09 7 views
4

當我手動頂層輸入#use "topfind" ;;,它的工作原理如下:關於「topfind」?

#use "topfind" ;; 
- : unit =() 
Findlib has been successfully loaded. Additional directives: 
#require "package";;  to load a package 
#list;;     to list the available packages 
#camlp4o;;    to load camlp4 (standard syntax) 
#camlp4r;;    to load camlp4 (revised syntax) 
#predicates "p,q,...";; to set these predicates 
Topfind.reset();;   to force that packages will be reloaded 
#thread;;     to enable threads #use "topfind" ;; 
    - : unit =() 

然而,當我在~/.ocamlinit文件放在#use "topfind";;,這是行不通的:

>cat ~/.ocamlinit 
#use "topfind";; 
#require "str";; 
(* #use "money.ml" ;; *) 

>ocaml 
    Objective Caml version 3.12.0 
# #list ;; 
Unknown directive `list'. 

這似乎是一個奇怪的問題,不是嗎?

回答

5

顯然,ocaml不加載.ocamlinit。把一些print_endline放入它來驗證。 一些想法:

  • 您可以使用-init選項來明確指定ocamlinit文件。
  • 也許ocaml是你的shell中的一些(錯誤的)別名?
  • 嘗試strace -f -ttT -e open $(which ocaml)看看它在哪裏尋找ocamlinit。
3

ygrek

感謝您的快速答覆。

您可以使用-init選項來明確指定ocamlinit文件。

%ocaml -init ~/.ocamlinit工作

也許ocaml的是你的shell一些(錯誤)的別名?

沒有ocaml的別名

嘗試使用strace -f -ttT -e打開$(這ocaml的),看看它看起來ocamlinit

%strace -f -ttT -e open $(which ocaml) 
19:12:28.484440 open("/etc/ld.so.cache", O_RDONLY) = 3 <0.000179> 
19:12:28.485002 open("/lib/libm.so.6", O_RDONLY) = 3 <0.000062> 
19:12:28.485384 open("/lib/libdl.so.2", O_RDONLY) = 3 <0.000062> 
19:12:28.485744 open("/lib/libncursesw.so.5", O_RDONLY) = 3 <0.000061> 
19:12:28.486107 open("/lib/libpthread.so.0", O_RDONLY) = 3 <0.000061> 
19:12:28.486514 open("/lib/libc.so.6", O_RDONLY) = 3 <0.000060> 
19:12:28.488228 open("/usr/bin/ocamlrun", O_RDONLY|O_LARGEFILE) = 3 <0.000018> 
19:12:28.488425 open("/usr/bin/ocaml", O_RDONLY|O_LARGEFILE) = 3 <0.000166> 
19:12:28.496499 open("/usr/lib/ocaml/ld.conf", O_RDONLY|O_LARGEFILE) = 4 <0.000028> 
19:12:28.502249 open("/usr/bin/ocaml", O_RDONLY|O_LARGEFILE) = 3 <0.000021> 
19:12:28.506085 open("/usr/lib/ocaml/ld.conf", O_RDONLY|O_LARGEFILE) = 4 <0.000029> 
19:12:28.506880 open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3 <0.000020> 
Objective Caml version 3.12.1 
19:12:28.507797 open("/usr/lib/ocaml/pervasives.cmi", O_RDONLY|O_LARGEFILE) = 3 <0.000019> 
19:12:28.511012 open(".ocamlinit", O_RDONLY|O_LARGEFILE) = 3 <0.000018> 
19:12:28.511325 open("money.ml", O_RDONLY|O_LARGEFILE) = 4 <0.000020> 
19:12:28.513412 open("/usr/lib/ocaml/list.cmi", O_RDONLY|O_LARGEFILE) = 5 <0.000018> 
19:12:28.514858 open("/usr/lib/ocaml/printf.cmi", O_RDONLY|O_LARGEFILE) = 5 <0.000020> 
19:12:28.527847 open("/usr/lib/ocaml/sys.cmi", O_RDONLY|O_LARGEFILE) = 5 <0.000029> 
# 

的原因是,有是當前目錄中的.ocamlinit文件。所以ocaml使用它而不是~/.ocamlinit

謝謝!