2013-05-14 5 views
18

Ich verwende Jane Street 's async_core durch Hinzufügen package(async_core) in _tags. Wie verwendet man -thread Compiler Flag mit ocamlbuild?

Wenn ich verwenden, gibt es mir die folgende Fehlermeldung:

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


ich es gegoogelt und hier ist das, was ich bekam http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual039.html

Dort heißt es:

Programs that use system threads must be linked as follows:

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

Also änderte ich meinen ocamlbuild-Befehl wie folgt:

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

Aber der Fehler bleibt gleich. Auch der eigentliche Befehl, den ocamlbuild generiert hat, bleibt derselbe ohne -thread.


Wie kann ich damit umgehen?

+0

Wer hasst mich so sehr, dass jede meiner Fragen abgelehnt wird? –

Antwort

18

Was möchten Sie wissen, ist, ob es eine ocamlbuild Tag (~ Funktion) das -thread Argument an die entsprechenden Befehlszeilen hinzuzufügen, statt es mit -cflag in unbefriedigender Weise Hacking. Wie in this blog post erklärt, sollten Sie die -documentation Möglichkeit ocamlbuild verwenden:

% 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" 

So lautet die Antwort: -tag thread auf Ihre ocamlbuild Aufruf Zeile hinzufügen, oder einfach nur thread an der entsprechenden Stelle in _tags.

+2

In dem sehr unwahrscheinlichen Fall, dass die Antwort von gasche nicht klar genug ist, hier ist eine _tags Datei Janestreet in einem ihrer Gespräche verwendet: https://bitbucket.org/yminsky/core-hello-world/src/85769e337d3e70a4b9e3246503f59991c109afe8/_tags?at= Standard – rgrinberg

+1

danke. Ich denke, ich habe die Tag-Dinge in ocamlbuild –

+0

@JacksonTale nicht verstanden, mit anderen Worten, Sie müssen eine '_tags'-Datei in dem Verzeichnis erstellen, in dem Sie Ihr Projekt kompilieren. 'ocamlbuild' sucht nach Flags in der' _tags' Datei und ruft den notwendigen Befehl mit den entsprechenden Flags für die Dateien auf, die Sie in der '_tags' Datei angegeben haben. –

Verwandte Themen