运行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
文件“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 ;;
可能有什么问题?如何使用ocaml安装语法模块?
我使用的是Mac OS X 10.6.4,我从this site.
安装了Ocaml我用'camlp4 -where'获得了以下结果。
simple> camlp4 -where /usr/local/lib/ocaml/camlp4
swigp4.ml可下载here。
答案 0 :(得分:1)
我从未使用过这个swig包,但是使用了camlp4语法模块。你可能有camlp4,所以我猜这个问题是使用的语法。您可以检查camlp4和语法模块,找到camlp4目录,camlp4 -where
并查看该目录是否有,/Camlp4Parsers/Camlp4GrammarParser.[cmi|cmo|cmx|o]
如果是语法,我为camlp4语法提取了一些代码,并且表达式的结构略有不同(我不确定该格式是否无效,但至少不是我之前的结构方式) )
[[ | expr1 | expr2 ]]
应该是
[ [ expr1] | [expr2] ]
答案 1 :(得分:0)
我相信你没有使用最新版本的Swig。使用Swig 1.3,我遇到了同样的问题。尝试移动到swig 2.0.X,你就没有问题了。
我一直在研究Xapian的ocaml绑定,不幸的是,Swig中的ocaml支持已经有点不受维护了。但是,我发现Swig源代码树中的示例非常有用。我已经整理了一个很好的make配方来编译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
。我有一个gist我完整的Makefile,你也可能觉得它很有用。