[Interoperability of Octave and MATLAB: conflicts in 'mxArray' definition]

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[Interoperability of Octave and MATLAB: conflicts in 'mxArray' definition]

mabalenk
Dear all,

I have an interesting task. As part of our research project I would like to call Octave’s interpreter from a MATLAB function and autogenerate the final C++ code with help of MATLAB Coder. I have almost reached the end goal. You may follow my progress in this MATLAB Central thread: https://www.mathworks.com/matlabcentral/answers/759691-instantiate-an-instance-of-c-object-via-matlab-coder?s_tid=prof_contriblnk. Unfortunately, there is a final hurdle I need to overcome. This is the same data structure called “mxArray” used in both Octave and MATLAB. As I understand the definitions of “mxArray” are different in Octave and MATLAB. Once I try to compile the resulting MATLAB code with MATLAB Coder pulling in the Octave Interpreter definitions I receive an error due to conflicts in “mxArray”:

In file included from inter_c.cpp:15:
In file included from /Users/mabalenk/repo/git/alc/rascal/oct/inter.h:2:
In file included from /opt/local/include/octave-6.1.0/octave/interpreter.h:40:
In file included from /opt/local/include/octave-6.1.0/octave/cdef-manager.h:31:
In file included from /opt/local/include/octave-6.1.0/octave/cdef-class.h:37:
In file included from /opt/local/include/octave-6.1.0/octave/cdef-method.h:37:
In file included from /opt/local/include/octave-6.1.0/octave/cdef-object.h:36:
In file included from /opt/local/include/octave-6.1.0/octave/error.h:37:
In file included from /opt/local/include/octave-6.1.0/octave/oct-map.h:36:
In file included from /opt/local/include/octave-6.1.0/octave/Cell.h:36:
/opt/local/include/octave-6.1.0/octave/ov.h:54:7: error: definition of type 'mxArray' conflicts with typedef of the same name
class mxArray;
      ^
/Applications/MATLAB_R2020b.app/extern/include/matrix.h:157:28: note: 'mxArray' declared here
typedef struct mxArray_tag mxArray;
                           ^

Therefore, I would like to ask, is there an elegant way to resolve these definition conflicts? Maybe the conflicts can be avoided by using a certain C++ namespace? A brute force approach would be to rename “mxArray” in Octave code base into a “mtrxArray” for example. But I would like to avoid such intrusive modifications to the code. Any of your suggestions and guidance would be most welcome. I asked this question on Octave Discourse forum: https://octave.discourse.group/t/calling-octave-interpreter-using-matlab-coder/837. But so far there were no responses. Thank you for your help and have a good day ahead!

Best wishes,
Maxim

Maxim Abalenkov \\ [hidden email]
+44 7 486 486 505 \\ http://mabalenk.gitlab.io