Compilation 如何将ocaml编译为本机代码
我对学习ocaml非常感兴趣,它速度快(他们说它可以编译成本地代码),而且功能强大。所以我尝试编写一些简单的代码,比如启用mysql事件调度器Compilation 如何将ocaml编译为本机代码,compilation,ocaml,native,Compilation,Ocaml,Native,我对学习ocaml非常感兴趣,它速度快(他们说它可以编译成本地代码),而且功能强大。所以我尝试编写一些简单的代码,比如启用mysql事件调度器 #load "unix.cma";; #directory "+mysql";; #load "mysql.cma";; let db = Mysql.quick_connect ~user:"username" ~password:"userpassword" ~database:"databasename"();; let sql =
#load "unix.cma";;
#directory "+mysql";;
#load "mysql.cma";;
let db = Mysql.quick_connect
~user:"username"
~password:"userpassword"
~database:"databasename"();;
let sql =
"SET GLOBAL EVENT_SCHEDULER=1;"
in
(Mysql.exec db sql);;
它在ocaml解释器上运行良好,但当我试图将其编译为本机时(我使用的是ubuntu karmic),这两个命令都不起作用
ocamlopt -o mysqleventon mysqleventon.ml unix.cmxa mysql.cmxa
ocamlopt -o mysqleventon mysqleventon.ml unix.cma mysql.cma
我也试过了
ocamlc -c mysqleventon.ml unix.cma mysql.cma
所有这些都会产生相同的消息
File "mysqleventon.ml", line 1, characters 0-1:
Error: Syntax error
然后我尝试删除“#load”,代码如下所示
let db = Mysql.quick_connect
~user:"username"
~password:"userpassword"
~database:"databasename"();;
let sql =
"SET GLOBAL EVENT_SCHEDULER=1;"
in
(Mysql.exec db sql);;
ocamlopt结果消息
File "mysqleventon.ml", line 1, characters 9-28:
Error: Unbound value Mysql.quick_connect
我希望有人能告诉我,我哪里做错了。加载和#目录
。他们指导ocaml在哪里找到mysql和unix库。对于本机(或字节码)编译,删除这些指令并用相应的指令替换它们#load
仅映射到文件名,而#目录
映射到-I
。所以对于字节码:
ocamlc unix.cma -I +mysql mysql.cma mysqleventon.ml -o mysqleventon
本机代码:
ocamlopt unix.cmxa -I +mysql mysql.cmxa -o mysqleventon mysqleventon.ml
注意:还有命令行事务中文件名的顺序
或者最好使用ocamlfind,不必担心路径和扩展:
ocamlfind ocamlopt -package unix,mysql -linkpkg mysqleventon.ml -o mysqleventon
只是一个注释:您不需要在显示的代码中使用Printf.sprintf。我第一次尝试使用数据库时从net修改了它(忘记了地址)。我试过你的建议,你是对的,所以我从代码中删除了“Printf.sprintf”部分。谢谢。这个命令很有效,你的解释真的很有帮助。非常感谢。