1
A
回答
4
您必须首先编译您希望包含的模块,然后将编译文件的位置提供给模块的编译命令(取决于它),然后在最终编译命令行中提供它。
让我们看看以下实例文件foo/moduleA.ml
:
let v = 1
和文件bar/moduleB.ml
:
open ModuleA
let w = v
的命令:
$ cd foo
$ ocamlc -c moduleA.ml
$ cd ..
会产生moduleA.cmo
和moduleA.cmi
。前者是模块的字节码对象(如原始对象文件中的.o
文件,但包含字节码数据和文本),后者是由自动生成的.mli
文件生成的字节码编译头。该字节码头是编译器编译依赖于ModuleA
的文件所必需的。
$ cd bar
$ ocamlc -I ../foo -c moduleB.ml
$ cd ..
将生产moduleB.cmo
,这取决于ModuleA
成功,因为先前的命令已经成功,因为我们指示编译器到哪里寻找与-I
命令行参数的依赖关系,其次的路径第一个模块。
最后的命令下面将从两个模块生成的字节码可执行文件:
$ ocamlc -I foo -I bar moduleA.cmo moduleB.cmo -o prog.byte
模块必须按照这个顺序来提供,让编译器知道依赖关系第一。此时参数-I
指示在哪里可以找到.cmo
文件。
在你的情况,你必须因此使用-I <location of std.cmi>
为编辑正确的相位和-I <location of std.cmo>
(或std.cma
,如果它是一个库),第二阶段(链接阶段)。如果您可以在一个命令(即ocamlc -I foo foo/moduleA.ml bar/moduleB.ml -o prog.byte
)中组合两个阶段,并且如果cmo
和cmi
文件都在同一个目录中,则只有一个参数就足够了。
相关问题
- 1. OCaml的顶层模块加载
- 2. OCaml:如何在Windows中使用模块
- 3. 加载不在当前目录中的OCaml模块
- 4. OCaml:尝试加载模块时的未绑定值加载
- 5. 如何加载不在dojo中的模块的JS文件?
- 6. 如何实现动态模块(在头文件中)加载c + +
- 7. 如何在打字稿文件中加载jquery模块?
- 8. 如何在流星中加载非js文件的npm模块
- 9. 懒加载模块不加载模块js文件
- 10. OCaml的:形容模块.mli文件
- 11. 如何在模块中加载widgetkit shortcode?
- 12. 如何只在linux中加载模块?
- 13. 如何在PyV8中加载nodejs模块?
- 14. 无法加载模块模型文件
- 15. OCaml - 如何加载file.ml
- 16. 如何使用CodeIgniter在HMVC上的模块文件夹之外加载模块?
- 17. 我如何加载模块和文件在实习生配置模块?
- 18. 如何使用模块加载插件
- 19. 如何加载Yii模块组件?
- 20. 如何根据条件加载模块?
- 21. OCaml:如何获得模块别名本地mli文件
- 22. 如何加载角模块
- 23. 如何加载mongojs模块
- 24. 如何根据angularJS中的配置文件加载模块
- 25. 我应该如何加载我自己模块中的文件?
- 26. 如何加载自定义PHP Magento的模块模板文件
- 27. OCaml中的模块和类
- 28. OCaml中的个人模块
- 29. 在erlang中加载模块的事件
- 30. 在url模式文件中加载django.apps模块
'#'指令并非真正用于编译的项目。这是编译行的问题。 – nlucaroni
那我该如何使用'Std'模块? –
尽管didierc提到使用“open”,但它被认为是不好的做法(除了在本地环境中)。这是因为可以覆盖先前声明的函数。你应该在答案中调用'ModuleA.v'。它更清晰,代码复杂,你知道'v'来自哪里。 – nlucaroni