【发布时间】:2020-06-23 16:16:50
【问题描述】:
我正在 Windows docker 容器中运行已编译的 Matlab 2016a 可执行文件。 Matlab 编译器运行时安装在容器中。当我执行不需要图形的代码时,这很好用。
我扩展了我的程序以包含一些非常基本的绘图逻辑,它导致了这个异常:
"MATLAB:dispatcher:loadLibrary",message:"While setting the 'Parent' property of ''Axes'':
Can't load 'C:\\Program Files\\MATLAB\\MATLAB Runtime\\v901\\bin\\win64\\osgserver.dll': The specified module could not be found.
这是堆栈跟踪:
file:"C:\\Program Files\\MATLAB\\MATLAB Runtime\\v901\\mcr\\toolbox\\matlab\\graph2d\\subplot.p",name:"subplot",line:0
然后我编写了一个更简单的程序,它只是创建一个图形并绘制一条直线。运行此代码会产生相同的 osgserver.dll 错误。
我还检查了 osgserver.dll 路径并且该文件存在。这篇文章让我觉得这是一个 OpenGL 问题: https://www.mathworks.com/matlabcentral/answers/296652-can-t-reload-osgserver-dll
我怀疑 osgserver.dll 中的 OSG 是 Open Scene Graph,它似乎是某种图形渲染中间件: http://www.openscenegraph.org/index.php/about/features
由于这是一个 docker 容器,我可以理解为什么我在执行依赖于硬件的图形代码时会遇到问题。为了解决这个问题,我尝试将 OpenGL 切换到软件,将渲染器切换到“画家”:
opengl('software');
set(0, 'DefaultFigureRenderer', 'painters');
当我这样做时,我遇到了同样的 osgserver.dll 问题。我必须做些什么才能让渲染在 Windows docker 容器中工作?
谢谢
【问题讨论】:
-
When I execute this code可能包括那个代码? -
任何包含调用 subplot 或 plot 的代码都会产生相同的错误
-
您是否尝试将子图的 Parent 属性设置为图形句柄?
-
@oro777 你能解释一下你的推理吗?调用 subplot 函数时出现错误,所以我认为我无法处理它。
-
隐形人是如何制作的?这在 MATLAB IDE 中有效吗?