我安装了两个版本的Octave,版本3.6.4通过软件包管理器(Linux Mint Debian)安装,版本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函数,而不必每次都重新编译它们?
答案 0 :(得分:2)
我从帮助邮件列表中复制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版本的OCTAVE_HOME()都不同。默认情况下,此目录似乎位于路径中。
如果不是系统范围的,您可以检查.octaverc中的OCTAVE_VERSION()并为每个版本设置不同的路径。