我在Mac OS中编写了一个单行OCaml程序:print_string "hello world!\n"
。然后我按ocamlopt -o test test.ml
编译了它,生成的test
工作正常。
然后我把这个test
scp到我的Ubuntu& Nginx服务器,未安装OCaml。我发布了./test
,但收到了错误:-bash: ./code: cannot execute binary file: Exec format error
。
所以我必须在服务器上安装OCaml,并在那里编译我的程序吗?难道不可能以某种方式在Mac OS中编译我的程序,以便单独的可执行文件可以在Ubuntu服务器中运行吗?
答案 0 :(得分:1)
可执行(二进制)格式不能跨系统移植,没有。 ocamlopt生成一种格式,该格式对于进行编译的系统来说是原生的,除非它是相同的类型,否则你不应该期望它在任何其他系统上运行。
您可以通过编译为字节码来获得可移植性(使用ocamlc而不是ocamlopt)。但是,字节码可执行文件运行得更慢。