我安装了两个版本的 Octave,通过包管理器(Linux Mint Debian)安装的版本 3.6.4,以及从源代码编译的版本 4.0.0。我在 .octaverc 文件指向的文件夹中还有许多 .oct 文件。我的问题是 4.0.0 版本无法“看到”这些 .oct 文件,如果我尝试调用它们,整个会话就会崩溃,除非我使用 mkoctfile 在 4.0.0 下重新编译它们。然而,这样做意味着 3.6.4 版本无法“看到”它们,并且尝试调用它们会给出错误消息
failed to load: liboctinterp.so.3: cannot open shared object file: No such file or directory
如何让两个版本都能识别我的 .oct 函数,而不必每次都重新编译它们?
我从帮助邮件列表中复制了迈克和奥拉夫的答案(交叉发布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 () 并为每个版本设置不同的路径。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)