如何将ocaml代码编译为供C ++使用的本机
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将ocaml代码编译为供C ++使用的本机相关的知识,希望对你有一定的参考价值。
我如何将这个Facebook解析器库编译为本地代码,以便可以由我的C ++程序导入https://github.com/facebook/flow/tree/master/src/parser
我尝试使用ocamlopt
和dune build
,但似乎有错误。
File "src/services/saved_state/dune", line 7, characters 4-29:
7 | saved_state_dummy_fetcher
^^^^^^^^^^^^^^^^^^^^^^^^^
Error: Module Saved_state_dummy_fetcher is excluded but it doesn't exist.
谢谢
答案
OCaml是与C或C ++不同的语言,它使用的调用约定和二进制接口(ABI)与C或C ++不同。关于OCaml,这里没有什么特别的,即使使用不同的C ++编译器编译的代码通常也不兼容,也无法导入。
因此,如果要从用语言B编写的程序中调用以语言A编写的库函数,则必须使用bindings。如果没有绑定,则可以编写自己的绑定,尽管它不是一个琐碎的项目,因为您必须决定如何将C数据结构转换为OCaml数据结构,反之亦然。如果您或其他人决定采用这条路线,请参考以下提示。 official documentation描述了底层接口。 CTypes库提供了更高级别且不太容易出错的接口(该接口还可以生成C代码,您以后可以将其编译为.so文件)。
当然,在编写存根之前,您还应该learn如何编译流项目,因为显示的错误与将OCaml代码导入C或C ++项目无关。您应遵循流程homepage提供的说明。
以上是关于如何将ocaml代码编译为供C ++使用的本机的主要内容,如果未能解决你的问题,请参考以下文章