如何将ocaml代码编译为供C ++使用的本机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将ocaml代码编译为供C ++使用的本机相关的知识,希望对你有一定的参考价值。

我如何将这个Facebook解析器库编译为本地代码,以便可以由我的C ++程序导入https://github.com/facebook/flow/tree/master/src/parser

我尝试使用ocamloptdune 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 ++使用的本机的主要内容,如果未能解决你的问题,请参考以下文章

将 C# .net 4 代码编译为 .net 3.5?

如何将 Java 源代码交叉编译为 JavaScript?

使用 emcc 将 C++ 代码编译为 WASM 的问题

将 Python 代码编译为 Pascal DLL

C代码编译为C++,但不是C [重复]

erlang如何使用一个OS线程实现抢占式调度?