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

问题描述 投票:0回答:1

我如何将这个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.

谢谢

c++ ocaml bytecode native-code
1个回答
0
投票

OCaml是与C或C ++不同的语言,它使用的调用约定和二进制接口(ABI)与C或C ++不同。关于OCaml,这里没有什么特别的,即使使用不同的C ++编译器编译的代码通常也不兼容,也无法导入。

因此,如果要从用语言B编写的程序中调用以语言A编写的库函数,则必须使用bindings。如果没有绑定,则可以编写自己的绑定,尽管它不是一个琐碎的项目,因为您必须决定如何将C数据结构转换为OCaml数据结构,反之亦然。如果您或其他人决定采用这条路线,请参考以下提示。 official documentation描述了底层接口。 CTypes库提供了更高级别且不太容易出错的接口(该接口还可以生成C代码,您以后可以将其编译为.so文件)。

当然,在编写存根之前,您还应该learn如何编译流项目,因为显示的错误与将OCaml代码导入C或C ++项目无关。您应遵循流程homepage提供的说明。

© www.soinside.com 2019 - 2024. All rights reserved.