从Vim调用OCaml:无法加载共享库dllbin_prot_stubs

时间:2017-09-28 17:02:20

标签: vim ocaml opam

我有一个OCaml程序,我想从Vim打电话。

在我的.vimrc中,我定义了一个应该执行OCaml字节码的命令:

command! MyCommand call FunctionCallingOCaml()
function! FunctionCallingOCaml()
  let scriptPath = $HOME . "/path/to/myOCamlProgram.byte"
  let ocamlCmd = "ocamlrun " . scriptPath
  execute "!" . ocamlCmd
endfunction

不幸的是,这不起作用;我收到一条错误消息:

  

致命错误:无法加载共享库dllbin_prot_stubs   原因:dllbin_prot_stubs.so:无法打开共享对象文件:没有这样的文件或目录

我可以毫不拖延地从另一个运行bash的终端执行myOCamlProgram.byte

此外,我可以使用ls调用来自Vim的grep等shell内置函数和execute等程序,而不会出现问题。

我的系统:

uname -a

  

Linux marathon 4.12.10-1-ARCH#1 SMP PREEMPT 8月30日星期三12:18:42 CEST 2017 x86_64 GNU / Linux

opam --version:1.2.2

VIM - Vi IMproved 8.0(2016年9月12日,编译时间为2017年9月19日13:59:47)

1 个答案:

答案 0 :(得分:1)

事实证明OPAM在运行Vim的shell中没有正确初始化。 PATH没有包含导致错误的OCaml二进制文件。

作为修复,我调用eval $(opam config env)来设置环境变量并修改PATH,以便我的Linux安装将从Vim运行OCaml程序:

let ocamlCmd = "eval $(opam config env) && ocamlrun " . scriptPath
execute "!" . ocamlCmd

更好的是,将其添加到.bash_profile,以便每次登录时都会针对OPAM初始化shell:

. /home/mb/.opam/opam-init/init.sh

shell脚本sources之前的点。