基本Ocaml:如何编译?

基本Ocaml:如何编译?,ocaml,opam,Ocaml,Opam,刚从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.fi

刚从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
中,我可以只
要求“re2”
并从那里开始

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

[编辑]

到目前为止,我已经试过了

ocamlbuild-使用ocamlfind-包核心-包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-标记线程-使用ocamlfind-包核心-包re2

在失败之前,它会输出6000多行看起来像是
make
output的内容:

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

所以我不确定下一步要尝试什么。

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

让我们为您的项目创建一个简单的
\u 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或软件包管理器进行安装)

之后,您将有一个通用的
配置
脚本和makefile。所以你只需要打字

./configure
make 
您的文件将被编译

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

ocamlbuild ls.native
关于这个文件的一些解释。preamle包含构建核心风格应用程序所需的一切

可执行文件部分描述可执行文件,并向re2库添加依赖项


更新:修复了一些问题。

我正在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和re2,使用
opam安装core utop re2

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


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

调用
oasis安装程序
返回
W:BSD-3-clause'中的未知许可证'BSD-3-clause'
Ok,让我们尝试更简单的方法。以麻省理工学院为例。我已经更新了帖子。也许你的绿洲太老了…顺便说一句,它只是一个警告,它代表的是什么,所以它应该起作用是的,它只是一个警告。did
/配置;make
但是得到了与上面相同的错误(在6k行输出之后),接着是一个额外的错误:
E:Failure(“Command'/home/thatsme/.opam/4.01.0/bin/ocamlbuild'ls.native-tag debug'终止,错误代码为10”)
(为了确保我们在这里是正常的,它确实在utop中运行)使用
ocamlbuild-使用ocamlfind-package re2-package core ls.byte
可以很好地编译它,但是在编译为本机时遇到了问题。对于勇敢者来说:第一个文件是ocamlbuild的输出,第二个是正在编译的文件。