为SWIG安装Ocaml/语法模块

为SWIG安装Ocaml/语法模块,ocaml,swig,Ocaml,Swig,运行ocaml的Swig示例会显示此错误消息 rm -rf swig.mli swig.ml swigp4.ml && ../../../preinst-swig -ocaml -co swig.mli 2>/dev/null && ../../../preinst-swig -ocaml -co swig.ml 2>/dev/null && ../../../preinst-swig -ocaml -co swigp4.ml 2>/dev/null && ocamlc -c swig.mli

运行ocaml的Swig示例会显示此错误消息

rm -rf swig.mli swig.ml swigp4.ml && ../../../preinst-swig -ocaml -co swig.mli 2>/dev/null && ../../../preinst-swig -ocaml -co swig.ml 2>/dev/null && ../../../preinst-swig -ocaml -co swigp4.ml 2>/dev/null && ocamlc -c swig.mli && ocamlc -c swig.ml && ocamlc -I ` camlp4 -where` -pp "camlp4o pa_extend.cmo q_MLast.cmo" -c swigp4.ml File "swig.ml", line 159, characters 54-57: Warning 20: this argument will not be used by the function. File "swigp4.ml", line 26, characters 2-6: Parse error: Deprecated syntax, the grammar module is expected File "swigp4.ml", line 1, characters 0-1: Error: Preprocessor error rm-rf swig.mli swig.ml swigp4.ml和../../../preinst swig-ocaml-co swig.mli 2>/dev/null和../../preinst swig-ocaml-co swig.ml 2>/dev/null和../../preinst swig-ocaml-co swigp4.ml 2>/dev/null和&ocamlc-c swig.ml 文件“swig.ml”,第159行,54-57个字符: 警告20:函数将不使用此参数。 文件“swigp4.ml”,第26行,字符2-6: 分析错误:语法已弃用,应为语法模块 文件“swigp4.ml”,第1行,字符0-1: 错误:预处理器错误 文件“swigp4.ml”,第26行,字符2-6具有以下内容

EXTEND Line 25: expr: Line 26: [ [ e1 = expr ; "'" ; "[" ; e2 = expr ; "]" -> Line 27: > ... Line 114: | f = expr ; "'" ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" -> Line 115: > Line 116: ] ] ; Line 117: END ;; 延伸 第25行:expr: 第26行:[[e1=expr;“'”;“[“e2=expr;”]”-> 第27行:> ... 第114行:|f=expr;“'”;”(“args=LIST0(expr级别“简单”)SEP“,“;”)-> 第115行:> 第116行:[]; 第117行:结束;; 可能有什么问题?如何使用ocaml安装语法模块

补充 我使用MacOSX10.6.4,并从安装了Ocaml

我用“camlp4-where”得到了以下结果

simple> camlp4 -where /usr/local/lib/ocaml/camlp4 简单>camlp4-其中 /usr/local/lib/ocaml/camlp4
swigp4.ml是可下载的。

我从未使用过这个swig包,但使用过camlp4语法模块。您可能有camlp4,所以我猜问题在于所使用的语法。您可以检查camlp4和语法模块,通过,
camlp4-where
查找camlp4目录,并查看该目录是否有,
/camlp4parser/Camlp4GrammarParser。[cmi | cmo | cmx | o]

如果是语法,我为camlp4语法编写了一些代码,表达式的结构略有不同(我不确定该格式是否无效,但至少不是我以前的结构)

应该是

[ [ expr1] | [expr2] ]

我从未使用过这个swig软件包,但使用过camlp4语法模块。您可能有camlp4,所以我猜问题在于所使用的语法。您可以检查camlp4和语法模块,通过,
camlp4-where
查找camlp4目录,并查看该目录是否有,
/camlp4parser/Camlp4GrammarParser。[cmi | cmo | cmx | o]

如果是语法,我为camlp4语法编写了一些代码,表达式的结构略有不同(我不确定该格式是否无效,但至少不是我以前的结构)

应该是

[ [ expr1] | [expr2] ]

我相信您没有使用最新版本的Swig。对于swig1.3,我也有同样的问题。尝试移动到swig2.0.X,您将不会遇到任何问题

我一直在为Xapian开发ocaml绑定,不幸的是,Swig中的ocaml支持没有得到维护。但是,我发现Swig源代码树中的示例非常有用。我已经为编译swig依赖项准备了一个不错的制作方法。您可能会注意到,这与swig示例并没有什么不同,我只是无耻地利用这段时间来分享它:

SWIG=../../swig/preinst-swig
swig:
    $(SWIG) -ocaml -co swigp4.ml
    $(SWIG) -ocaml -co swig.mli 
    $(SWIG) -ocaml -co swig.ml
    ocamlfind ocamlc -package camlp4 \
    -pp "camlp4o pa_extend.cmo q_MLast.cmo" \
    -c swigp4.ml
    ocamlc -c swig.mli swig.ml

然后,在编译任何使用语法扩展的代码时,您可以通过包含
-pp“camlp4o./swig4.cmo”
来构建它。链接时还需要添加
swig.cmo
。我有一个完整的Makefile,你可能也会发现它很有用

我相信您没有使用最新版本的Swig。对于swig1.3,我也有同样的问题。尝试移动到swig2.0.X,您将不会遇到任何问题

我一直在为Xapian开发ocaml绑定,不幸的是,Swig中的ocaml支持没有得到维护。但是,我发现Swig源代码树中的示例非常有用。我已经为编译swig依赖项准备了一个不错的制作方法。您可能会注意到,这与swig示例并没有什么不同,我只是无耻地利用这段时间来分享它:

SWIG=../../swig/preinst-swig
swig:
    $(SWIG) -ocaml -co swigp4.ml
    $(SWIG) -ocaml -co swig.mli 
    $(SWIG) -ocaml -co swig.ml
    ocamlfind ocamlc -package camlp4 \
    -pp "camlp4o pa_extend.cmo q_MLast.cmo" \
    -c swigp4.ml
    ocamlc -c swig.mli swig.ml

然后,在编译任何使用语法扩展的代码时,您可以通过包含
-pp“camlp4o./swig4.cmo”
来构建它。链接时还需要添加
swig.cmo
。我有一个完整的Makefile,你可能也会发现它很有用

我用“camlp4-where”添加了结果。我猜语法模块没有安装。你能教我如何安装这个模块吗?不,它实际上看起来正好相反。我想你误解了我的意思,从该命令返回的目录是否有Camlp4Parsers目录?然后安装好了。我检查了CamlP4Parser是否安装正确。至于语法,代码中有太多的“|”,因此检查起来并不简单。谢谢你的回答。我还看到了一个预处理器错误(我添加了错误消息)。同时,swig会重新生成接口文件。无论如何,修改代码以运行“ocamlc-I`camlp4-where`-pp”camlp4o pa_extend.cmo q_MLast.cmo“-c swigp4.ml”会给出相同的错误。我想是swig解决了这个问题。我用“camlp4-where”添加了结果。我猜语法模块没有安装。你能教我如何安装这个模块吗?不,它实际上看起来正好相反。我想你误解了我的意思,从该命令返回的目录是否有Camlp4Parsers目录?然后安装好了。我检查了CamlP4Parser是否安装正确。至于语法,代码中有太多的“|”,因此检查起来并不简单。谢谢你的回答。我还看到了一个预处理器错误(我添加了错误消息)。同时,swig会重新生成接口文件。无论如何,修改代码以运行“ocamlc-I`camlp4-where`-pp”camlp4o pa_extend.cmo q_MLast.cmo“-c swigp4.ml”会给出相同的错误。我想解决这个问题很有必要。