ocaml未按预期加载.cma

ocaml未按预期加载.cma,ocaml,Ocaml,我试着做以下几点 在几个ocaml模块中展开库的工作 编译库 将其加载到REPL中以试验公共API 为了执行1和2,我将与opam文件一起使用。现在,所有这些都非常适合轻松编译我的库,但是我在repl中测试它时遇到了困难 我目前的方法是启动repl并使用#load“\u build/default/.cma。这将成功执行,因为我已经#require删除了依赖项。然而,这实际上似乎并不影响repl中的绑定集。MainLibraryModule既不是作为模块绑定的,也不是由模块名限定的公共API引入

我试着做以下几点

  • 在几个ocaml模块中展开库的工作
  • 编译库
  • 将其加载到REPL中以试验公共API
  • 为了执行1和2,我将与opam文件一起使用。现在,所有这些都非常适合轻松编译我的库,但是我在repl中测试它时遇到了困难

    我目前的方法是启动repl并使用
    #load“\u build/default/.cma
    。这将成功执行,因为我已经
    #require
    删除了依赖项。然而,这实际上似乎并不影响repl中的绑定集。
    MainLibraryModule
    既不是作为模块绑定的,也不是由模块名限定的公共API引入的

    如果我在这里做了一些明显错误的事情,我应该如何加载这个
    cma
    文件以便我可以使用我的库。如果有更好的方法来完成任务3(不以任何方式修改全局状态),我也愿意这样做。

    当您使用
    #load
    时,加载模块的顶级名称不会作为REPL的顶级名称引入。要获得此效果,您需要
    打开
    模块

    # #load "unix.cma";;
    # stat;;
    Error: Unbound value stat
    # Unix.stat;;
    - : string -> Unix.stats = <fun>
    # open Unix;;
    # stat;;
    - : string -> Unix.stats = <fun>
    
    ##加载“unix.cma”;;
    #统计;;
    错误:未绑定值统计
    #Unix.stat;;
    -:string->Unix.stats=
    #开放式Unix;;
    #统计;;
    -:string->Unix.stats=
    

    如何检查模块名称的绑定?

    为了使用
    .cma
    文件中定义的模块,REPL需要能够找到相应的
    .cmi
    文件,这些文件是库中模块的编译接口文件

    这是
    #目录;的用例指令,将目录
    添加到可能包含cmi文件的目录列表中

    在您的情况下,需要在
    #加载
    指令:

    #directory "build/path_to_cmis";;
    #load "build/path_to_cma";;