2

刚刚从 ocaml 开始,并且正在努力使用各种编译器和工具。例如ocamlopt, ocamlc, ocamlbuild,corebuild等等。那么,如何编译以下内容?

open Core.Std

module Regex = Re2.Regex

let ls pattern = 
  let pat = Regex.create_exn pattern in
  let matcher = Regex.matches pat in
  Sys.ls_dir "." 
  |> List.filter ~f:matcher
  |> List.iter ~f:(fun s -> print_string s; print_newline ())

let () =
  match In_channel.input_line stdin with
  | None -> print_string "No Input"
  | Some pat -> ls pat

utop我可以#require "re2"从那里去。

如果不包含正则表达式模块,我只会使用corebuild ls.native,假设上面的代码放在ls.ml.

[编辑]

到目前为止已经尝试过

ocamlbuild -use-ocamlfind -package core -package re2

吐出来的

ocamlfind ocamldep -package core -package re2 -modules ls.ml > ls.ml.depends
ocamlfind ocamlc -c -package core -package re2 -o ls.cmo ls.ml
+ ocamlfind ocamlc -c -package core -package re2 -o ls.cmo ls.ml
ocamlfind: Error from package `threads': Missing -thread or -vmthread switch
Command exited with code 2.

所以经过一番谷歌搜索后,我被带到了这个博客,我试过了

ocamlbuild -tag thread -use-ocamlfind -package core -package re2

在失败之前吐出超过 6000 行看起来像make输出的内容:

collect2: error: ld returned 1 exit status
File "caml_startup", line 1:
Error: Error during linking
Command exited with code 2.

所以我不确定接下来要尝试什么。

4

2 回答 2

6

我在 64 位机器上使用 Ubuntu 14.04。我放弃了 ocaml 的 apt-get 版本:

sudo apt-get remove --purge ocaml ocaml-base-nox ocaml-compiler-libs \ 
                            ocaml-interp ocaml-native-compilers \ 
                            ocaml-nox campl4 ocaml-base ocaml-docs opam 

然后我根据此处的说明从源代码安装 opam 。

接下来我安装了core、utop和re2opam install core utop re2

最后我跑了ocamlbuild -use-ocamlfind -package re2 -package core -tag thread ls.native

它构建了所需的可执行文件。

于 2014-10-06T00:45:15.860 回答
2

我建议你使用绿洲工具。这并不像人们想象的那么难。但它消除了你所有的图书馆负担。

让我们为您的项目创建一个简单的_oasis文件:

OASISFormat: 0.4
Name:        ls
Version:     0.1
Synopsis:    Testing oasis
Authors:     Fizz_ed
License:     MIT
Plugins:     META (0.4), DevFiles (0.4)
BuildTools: ocamlbuild, camlp4o
BuildDepends: core, camlp4, threads, 
              sexplib.syntax, 
              bin_prot.syntax, 
              comparelib.syntax, 
              herelib, 
              herelib.syntax

Executable "ls"
  Path: .
  MainIs: ls.ml
  CompiledObject: best
  BuildDepends: re2

创建此文件后,运行oasis setup命令(如果oasis未安装,则使用 opam 或包管理器安装它)。

之后,您将拥有一个通用configure脚本和生成文件。所以你只需要输入

./configure
make 

你的文件将被编译。

或者你可以直接使用ocamlbuild,它也可以,因为 oasis 创建了所有必要的文件

ocamlbuild ls.native

关于文件的一些解释。前言包含构建核心风格应用程序所需的一切。

Executable 部分描述了您的可执行文件,并且还添加了对 re2 库的依赖项。

更新:修复了一些问题。

于 2014-10-05T21:56:43.347 回答