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