Jonathan Protzenko によるすばらしいガイドのおかげで、Windows (Cygwin) にOCaml + OPAM + utopをインストールして実行することができました。utopでは、特にctypes + ctypes.foreignを使用して、さまざまな WinAPI 呼び出しにアクセスしてすばやく実験およびプロトタイプを作成できるようにしたいと考えています。理論的には、ctypesパッケージを正常にインストールできました (成功)。残念ながら、実際にそれらを utopにロードしようとすると、驚くべきエラー メッセージが表示されて惨めに失敗します。opam install ...
utop # #require "ctypes.foreign";;
Error: Reference to undefined global `Ctypes_closure_properties'
で同じことをしようとするとrlwrap ocaml
、やや長いエラー メッセージが表示されます。
# #require "ctypes.foreign";;
C:\OCaml\lib\unix.cma: loaded
C:\OCaml\lib\bigarray.cma: loaded
C:\OCaml\lib\str.cma: loaded
C:\cygwin64\home\Mateusz\.opam\system\lib\bytes: added to search path
C:\cygwin64\home\Mateusz\.opam\system\lib\ctypes: added to search path
C:\cygwin64\home\Mateusz\.opam\system\lib\ctypes\ctypes.cma: loaded
C:\cygwin64\home\Mateusz\.opam\system\lib\ctypes\ctypes-foreign-base.cma: loaded
Cannot load required shared library dllctypes-foreign-base_stubs.
Reason: dllctypes-foreign-base_stubs.dll: Cannot resolve ffi_type_pointer.
C:\cygwin64\home\Mateusz\.opam\system\lib\ctypes\ctypes-foreign-unthreaded.cma: loaded
Characters -1--1:
#require "ctypes.foreign";;
Error: Reference to undefined global `Ctypes_closure_properties'
注:セッションの完全なトランスクリプトはこちらです。utop
これには、cmd.exe ターミナルでのセッションの出力とrlwrap ocaml
、Cygwin ターミナルでの追加のセッションの出力が含まれています。
なぜそれが起こるのか、または状況をさらにデバッグ/特定/診断する方法がまったくわからないので、回避策を見つけることができます。(ちなみに、私は OCaml と OPAM のまったくの初心者ですが、C/C++ と Linux の一般的な経験はかなりあります。) 以下は、私が持っているいくつかの質問です。うまくいけば、問題を十分に解決するのに役立つと思います。障害物を乗り越えるために:
- ローカルで git リポジトリ (つまり ctypes) を微調整して、元の github リポジトリの代わりに OPAM に渡す方法はありますか?
- ctypesの問題#198でも示唆されているように、「libffiの静的バージョン」が機能する可能性があることに言及しているように見えるコメントをなんとかグーグルで検索しました。しかし、私は OCaml のまったくの初心者であり、残念ながら、この提案をutopに適用する方法がまったくわかりません。
- どの libffi を ctypes に使用するかを OPAM に伝えるにはどうすればよいですか? (具体的には、「静的libffi」を使用するには?)
- インストールしたmingw64-x86_64-libffi Cygwin パッケージが静的にリンクされているか、動的にリンクされているかを確認するにはどうすればよいですか? または、両方のバリアントが提供されている場合、ctypes はどちらを使用しますか? libffi.a が PIC (?) 再配置 [
-fpic
?] にリンクされているかどうかを検出する方法について SO でいくつかの回答を見つけましたが、それらはすべて本当にハックのようで、少なくとも私の場合は、実際に機能しているようには見えませんでした。 . - どんな助けでも大歓迎です。OCaml、OPAM、utop、Cygwin の交差点にあることを考えると、これについて誰に尋ねればよいかさえわかりません。これらはすべて巨大で、多少無関係/直交するシステムです。問題を ctypes repo に投稿しようとしましたが、1か月以上経過したのは「パッチ歓迎」ラベルだけでした。