没有为以下模块提供实现:Str

  • 本文关键字:实现 Str 模块 ocaml oasis
  • 更新时间 :
  • 英文 :


我有一个使用Str模块的OCaml项目,但在编译时,我得到了以下错误:

$ make                            
ocaml setup.ml -build                                                    
Finished, 0 targets (0 cached) in 00:00:00.
+ /home/phase/.opam/system/bin/ocamlfind ocamlopt -g -linkpkg src/objects.cmx src/golf.cmx -o src/golf.native
File "_none_", line 1:                                                   
Error: No implementations provided for the following modules:            
         Str referenced from src/golf.cmx                                
Command exited with code 2.
Compilation unsuccessful after building 7 targets (6 cached) in 00:00:00.
E: Failure("Command ''/usr/bin/ocamlbuild' src/golf.native -tag debug' terminated with error code 10")
Makefile:7: recipe for target 'build' failed
make: *** [build] Error 1

这是一个绿洲项目,包含以下_oasis文件:

Name: GolfCaml
Version: 0.0.0
Synopsis: GolfScript Interpreter in OCaml
Authors: Jadon Fowler <jadonflower@gmail.com>
License: https://www.mozilla.org/en-US/MPL/2.0/
Description: GolfCaml is an interpreter for GolfScript in OCaml.
Homepage: http://jadonfowler.xyz/
OASISFormat: 0.4
BuildTools: ocamlbuild
Plugins: META (0.4), DevFiles (0.4)
Executable "golfcaml"
  Path: src
  MainIs: golf.ml
  CompiledObject: best

这是有问题的代码:

(* Token Regex from http://www.golfscript.com/golfscript/syntax.html *)
let token_regex = Str.regexp "[a-zA-Z_][a-zA-Z0-9_]*|'(?:\.|[^'])*'?|"(?:\.|[^"])*"?|-?[0-9]+|#[^nr]*|."
(* Iterate of a line and interpret each char *)
let interpret_line line =
  let tokens = Str.split token_regex line in
  List.iter (fun (x) -> printf "%sn" x) tokens

你差点就搞定了;-)

Str不在标准库中,所以你需要告诉oasis接受它。在_oasis文件中,只需在Executable部分添加一件事:

_oasis

Executable "golfcaml"
  Path: src
  MainIs: golf.ml
  CompiledObject: best
  BuildDepends:
    str

它会很好地工作:

make
ocaml setup.ml -build 
Finished, 0 targets (0 cached) in 00:00:00.
Finished, 4 targets (0 cached) in 00:00:00.

我也有类似的错误,但我使用Ocamlbuild而不是Oasis。我在_tags文件中添加了以下内容:

true: use_str

Ocamlbuild文档将use_str列为不推荐使用的内容,并将其替换为ocamlfind。但我没有安装后者,这使得标准包的use_str语法更加方便。

相关内容

  • 没有找到相关文章

最新更新