问题描述
Octave 有没有办法抑制下面的 io 包加载警告消息:
OpenJDK 64 位服务器 VM 警告:存档的非系统类被禁用,因为指定了 java.system.class.loader 属性(值 = "org.octave.OctClassLoader")。要使用归档的非系统类,必须不设置此属性
我无法控制 io 包加载正在做什么,我的程序的其余部分工作正常。但是它使控制台输出变得混乱非常烦人。
我在 Xubuntu 18.04 中运行八度音程脚本
谢谢!
解决方法
我不知道这是否与 io 包本身有关。这可能就是您设置八度音程以在系统上使用 java 的方式。
此外,这个警告似乎是由 Java 生成的,而不是由八度音程生成的,所以我怀疑您是否可以从 in 八度音程中执行任何操作来将其关闭。
实际上它的意思是,大概 io(或您正在使用的 io 包中的特定函数)依赖于 java interface,并且以某种方式运行 java 命令并设置了 -D 属性如您的警告中所述(即,大概是 java -Djava.system.class.loader="org.octave.OctClassLoader" ...
)。
following excerpt from the manual 可能与您相关:
您可以在名为 java.opts 的文件中指定用于创建 JVM 的选项。这是一个文本文件,您可以在其中输入包含 -X 和 -D 选项的行,然后在初始化期间将这些选项传递给 JVM。
Java 选项文件所在的目录由环境变量 OCTAVE_JAVA_DIR 指定。如果取消设置,则使用 javaclasspath.m 所在的目录(通常为 OCTAVE_HOME/share/octave/OCTAVE_VERSION/m/java/)。你可以通过执行
找到这个目录which javaclasspath
,
这似乎已在 Octave bug #55174 中修复。
hackish 解决方法(二进制编辑 Octave 库):
cp -ai /usr/lib/x86_64-linux-gnu/liboctinterp.so.7.0.1 a
bbe -e 's/-Djava.system.class.loader=org.octave.OctClassLoader/-Dfoo=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/' a > b
ls -l a b # Make sure the binary edit did not change the file length!
chmod 644 b
sudo cp -ai b /usr/lib/x86_64-linux-gnu/liboctinterp.so.7.0.1
sudo chown root.root /usr/lib/x86_64-linux-gnu/liboctinterp.so.7.0.1