2

我正在尝试加载从 Mathematica 8.0 编译到共享库的 C++ 函数。我确实设法使用 MathLink 使用 C 函数,但 MathLink 似乎不支持 C++ 函数。所以我尝试创建一个共享库并通过LibraryLink加载它,但是LibraryFunctionLoad似乎无法加载C++函数。有没有人设法在 Mathematica 中使用 C++ 函数,如果是这样,必须采取哪些技巧才能使其工作?

4

1 回答 1

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

于 2013-01-15T10:33:43.670 回答