2013-05-14 13 views
18

Używam Jane Street 's async_core przez dodanie package(async_core) w _tags.Jak używać -thread flaga kompilatora z ocamlbuild?

Gdy używam , to daje mi następujący błąd:

camlfind ocamlopt -linkpkg -package async_core -package unix -package netclient -package mongo -package xml-light src/airport.cmx test/test_airport.cmx -o test/test_airport.native ocamlfind: Error from package `threads': Missing -thread or -vmthread switch


google go i oto co mam http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual039.html

Mówi:

Programs that use system threads must be linked as follows:

ocamlc -thread other options unix.cma threads.cma other files 

Zmieniłem więc polecenie ocamlbuild w ten sposób:

ocamlbuild -use-ocamlfind -cflag -thread -I src test/test_airport.native

Ale błąd pozostaje ten sam. również faktyczne polecenie wygenerowane przez ocamlbuild pozostaje takie samo bez -thread.


Jak sobie z tym poradzić?

+0

Kto mnie tak bardzo nienawidzi, że zgłasza każde moje pytanie? –

Odpowiedz

18

Co chcesz wiedzieć, czy istnieje znacznik ocamlbuild (funkcja ~), aby dodać argument -thread do odpowiednich wierszy polecenia, zamiast hakować go z -cflag w niezadowalający sposób. Jak wyjaśniono in this blog post, należy użyć opcji -documentation z ocamlbuild:

% ocamlbuild -documentation | grep thread 
flag {. byte, link, ocaml, program, thread .} "threads.cma -thread" 
flag {. link, native, ocaml, program, thread .} "threads.cmxa -thread" 
flag {. doc, ocaml, thread .} "-I +threads" 
flag {. compile, ocaml, thread .} "-thread" 

Więc odpowiedź brzmi: dodaj -tag thread do ocamlbuild inwokacja linii, lub po prostu thread w odpowiednim miejscu w _tags.

+2

W bardzo mało prawdopodobnym przypadku, że odpowiedź gasche'a nie była wystarczająco jasna, tutaj janestreet jest używany w jednym ze swoich wykładów: https://bitbucket.org/yminsky/core-hello-world/src/85769e337d3e70a4b9e3246503f59991c109afe8/_tags?at= domyślnie – rgrinberg

+1

dzięki. Myślę, że nie zrozumiałem tagów w ocamlbuild –

+0

@JacksonTale, innymi słowy, musisz utworzyć plik '_tags' w katalogu, w którym kompilujesz swój projekt. 'ocamlbuild' wyszuka flagi w pliku' _tags' i wywoła niezbędne polecenie z odpowiednimi flagami dla plików określonych w pliku '_tags'. –