Oct 文件 运行 在 Octave 3.6.4 或 4.0.0 下但不是两者

Oct files run under Octave 3.6.4 or 4.0.0 but not both

我安装了两个版本的 Octave,通过包管理器 (Linux Mint Debian) 安装的版本 3.6.4,以及从源代码编译的版本 4.0.0。我在 .octaverc 文件中指向的文件夹中也有许多 .oct 文件。我的问题是 4.0.0 版不能 "see" 这些 .oct 文件,如果我尝试调用它们,整个会话就会崩溃,除非我在 4.0.0 下使用 mkoctfile 重新编译它们。然而,这样做意味着版本 3.6.4 不能 "see" 它们并且尝试调用它们会给出错误消息

failed to load: liboctinterp.so.3: cannot open shared object file: No such file or directory

如何让两个版本都能识别我的 .oct 函数,而不必每次都重新编译它们?

我从帮助邮件列表中复制了 Mike 和 Olaf 的答案(交叉发布 http://octave.1599824.n4.nabble.com/Oct-files-run-in-Octave-version-3-6-4-or-4-0-0-but-not-both-td4672690.html

简答:你不能。

Octave 库 API 和 ABI 在不同版本之间发生变化。 Octave 3.6 是 liboct{ave,interp}.so.1,Octave 3.8 是 liboct{ave,interp}.so.2,4.0 是 liboct{ave,interp}.so.3。这些库不向前或向后兼容。

您可以使用两个(或三个?)不同的路径编译您的 oct 文件 路径中需要 Octave 版本。

如果你想在系统范围内安装你的文件,不同编译的 oct 文件的一个很好的候选目录似乎是

fullfile (OCTAVE_HOME (), "lib/octave/site/oct/", octave_config_info ("canonical_host_type"))

假设 OCTAVE_HOME () 对于每个 Octave 版本都是不同的。默认路径下好像有这个目录。

如果不是系统范围的,您可以检查 .octaverc 中的 OCTAVE_VERSION () 并为每个版本设置不同的路径。