是否可以将C ++共享库加载到Mathematica 8.0?

时间:2013-01-15 10:10:04

标签: c++ mathematica-8 mathlink

我试图从Mathematica 8.0加载编译到共享库的C ++函数。我确实设法使用MathLink使用C函数,但MathLink似乎不支持C ++函数。所以我尝试创建一个共享库并通过LibraryLink加载它,但是LibraryFunctionLoad似乎无法加载C ++函数。有没有人设法在Mathematica中使用C ++函数,如果有的话,为了使它工作,必须做些什么?

1 个答案:

答案 0 :(得分:2)

问题是C++代码使用了导出符号的修改。

这将命名空间,类名,返回类型,名称和参数编码为导出符号的一部分。这意味着一个名为:

的函数
int hello(int x, int y, int z)

出口如下:

_Z5helloiii

这是在linux上的g ++上完成的,windows有一个不同的修改方案。

为了确保以C兼容的方式导出函数,您将函数包装在extern "C"机制中,这会导致它以与MathLink兼容的形式导出

所以你在标题中使用以下内容:

#ifdef __cplusplus
extern "C" {
#endif

int hello(int x, int y, int z);

#ifdef __cplusplus
}
#endif

只要您在#include实施中C++此标头,它就应该与MathLink正确链接