在您的系統上安裝某些東西並不會使它對編譯器自動可見,這不僅適用於OCaml,而且適用於大多數常規系統,例如C或C++等等。
這意味着您需要將某些標誌傳遞給編譯器,或編寫Makefiles或使用某些項目管理系統。
在OCaml中,我們有相當成熟的基礎設施,特別是與opam
配合得很好。我不想深入解釋,只是一個快速的概述。
ocamlfind
工具用於在系統上查找庫。它在想法上有點接近pkg-config
,但在設計上卻有很大的不同。它包裝編譯器工具以將選項傳遞給它們。
ocamlbuild
是一個奇特的瑞士刀,這是每個OCamler的武器庫必備的。它是一種知道所有其他工具的工具,以及如何將它們粘合在一起。我會說這是編譯你的項目的首選方式,尤其是小的。
oasis
在精神上接近於autotools
,但不是那種通用的,是在前提下編寫的,應該很容易使用。事實上這很容易,但仍然非常靈活和強大。
有了這個概述,我們可以直接去解決您的問題。所以你已經安裝了ctypes。現在讓我們來看看包在ocamlfind
的角度如何在您的系統中可見。最簡單的方法是列出所有的包,可見ocamlfind
找到有:
$ ocamlfind list | grep ctypes
ctypes (version: 0.4.1)
ctypes.foreign (version: 0.4.1)
ctypes.stubs (version: 0.4.1)
ctypes.top (version: 0.4.1)
所以,它看起來像,說下ctypes的傘這兒有4個庫。一個基本庫和一些額外的庫,提供一些功能,默認情況下不需要。
沒有讓我們嘗試用ocamlbuild
ocamlbuild -package ctypes yourprogram.native
或者直接用ocamlfind
使用它們,而不ocamlbuild
:
ocamlfind ocamlopt -package ctypes yourprogram.ml -o yourprogram.native
正如你可以看到,有一個package
選項,您可以向其中通由ocamlfind
發現包的名稱,它會被自動地可見編譯器。
來源
2015-05-06 01:15:41
ivg
你用什麼構建工具?你能告訴我們你如何編譯你的代碼? – PatJ