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