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